2010-04-26 2 views
3

나는 몇 줄의 코드로 내 문제를 지목했습니다 안드로이드 위치 오류

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 5.0f, this); 
lat = location.getLatitude(); 
lng = location.getLongitude(); 
//lat = new Double(40.431682); 
//lng = new Double(-74.2021819); 
pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000)); 

내 onLocationChanged 나는 LastKnownLocation

을 얻기 위해 시도하는 경우에 당신은

public void onLocationChanged(Location location) { 
     if (location != null) { 
     lat = location.getLatitude(); 
     lng = location.getLongitude(); 
     pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000)); 
     } 
} 

내 응용 프로그램 충돌을 궁금해하는 경우

위치를 수동으로 피드하면 정상적으로 작동합니다.

나는 지금은 무엇이 잘못 되었습니까?

답변

3

먼저 충돌이 발생할 때마다 adb logcat, DDMS 또는 DDMS 퍼스펙티브를 Eclipse에서 사용하여 충돌과 관련된 Java 스택 추적을 가져옵니다. 이 경우 location 개체를 사용하려고 시도 할 때 NullPointerException이있는 것으로 나타났습니다.

requestLocationUpdates() (특히 GPS)을 호출 할 때까지 getLastKnownLocation()을 사용할 수 없습니다. GPS가 수정 사항을 제공하기 시작하는 데 수십 초가 걸릴 수 있습니다.

코드를 변경하여 getLastKnownLocation()의 사용을 제거하고 onLocationChanged() 메소드에 이미있는 위치를 필요로하는 로직을 사용하십시오. 최소한 nulllocation 개체를 찾아 사용하지 마세요.

+0

감사합니다! 나는 이것을 스스로 게시 한 직후에 그것을 고쳤다. –

0

내 수정은 기본적으로 거친 위치를 사용하는 것이 었습니다.

Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_COARSE); 
String bestProvider = lm.getBestProvider(criteria, true); 
Location loc = lm.getLastKnownLocation(bestProvider); 
lat = loc.getLatitude(); 
lng = loc.getLongitude(); 
0

기기에서 미세한 위치 정보 (GPS)가 사용 설정되지 않았기 때문에 이러한 문제가 발생할 수 있습니다. 또는 매니페스트에 ACCESS_FINE_LOCATION 권한이 지정되지 않았습니다.

0

디버그하면 null 예외가 표시됩니다. 그래서 그것은 아직 해결되지 않은 위치에서 위도와 경도를 추출하려고하기 때문에 발생합니다. if (loc! = null) {}로이 추출을 둘러싸고 progressDialog를 넣어 거기에 사용자를 보유하십시오.