我在Android应用程序中使用以下代码来查找我的移动设备的当前位置:
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Double longitude = location.getLongitude();
Double latitude = location.getLatitude();
Log.i("LATITUDE", latitude.toString());
Log.i("LONGITUTDE", longitude.toString());
到目前为止,它工作正常,它给了我正确的位置坐标。但是在一段时间之前并没有对我的代码进行任何更改,它开始给我以下错误:
java.lang.RuntimeException:无法启动活动ComponentInfo {di.uoa.gr.e_commerce / di.uoa.gr.e_commerce.FirstResultsActivity}:
java.lang.NullPointerException:尝试在空对象引用上调用虚方法'double android.location.Location.getLongitude()' 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2695) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769) 在android.app.ActivityThread.access $ 900(ActivityThread.java:177) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1430) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5910) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1405) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
我确实打开了WiFi连接,以及我的位置。 任何人都可以找出可能出现的问题吗?
答案 0 :(得分:2)
getLastKnownLocation
[...]请注意,此位置可能已过期,例如,如果设备已关闭并移至其他位置。developer.android.com
如果您需要多次使用该位置,则应该使用requestSingleUpdate方法或requestLocationUpdates方法之一。 Here是包含所述方法的所有签名的文档。
它看起来像这样:
lm.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null);
然后您将收到班级中的位置。但是你的类需要实现LocationListener。作为替代方案,您可以提供LocationListener作为参数。
这看起来像这样:
lm.requestSingleUpdate(LocationManager.GPS_PROVIDER, new LocationListener() {
@Override
public void onLocationChanged(Location location)
{
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle)
{
}
@Override
public void onProviderEnabled(String s)
{
}
@Override
public void onProviderDisabled(String s)
{
}
}, null);
然后在onLocationChanged中获取您的位置。
答案 1 :(得分:0)
首先,您应该检查您是否拥有获取当前位置的权限,如果您使用的是Android API 23+,则必须手动提出。
其次,LocationManager.getLastKnownLocation不一定返回有效的位置,因为它可能返回" null"没有位置对您选择的提供商(GPS_PROVIDER)足够一致。如果此处没有位置,您应该回退到另一个提供商,如果找不到,请尝试请求位置。
答案 2 :(得分:0)
lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
不一定返回位置,设备没有保存的GPS位置,因此该方法返回null
;