安卓定位错误

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函数

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

如果我尝试获取LastKnownLocation,则我的应用程序会崩溃。

但是,如果我手动提供位置信息,它就可以正常工作。

目前我不知道出了什么问题。

4个回答

3

首先,每当您遇到崩溃时,请使用adb logcat、DDMS或Eclipse中的DDMS透视图获取与崩溃相关联的Java堆栈跟踪。在这种情况下,我怀疑您会发现在尝试使用您的location对象时出现了NullPointerException

在调用requestLocationUpdates()之后,特别是对于GPS,您不能立即使用getLastKnownLocation()。GPS可能需要几十秒钟才能开始提供修复服务。

请修改您的代码,消除对getLastKnownLocation()的使用,并只使用您onLocationChanged()方法中已经存在的位置逻辑。至少,请查找nulllocation对象并不要尝试使用它。


谢谢,你说得很对!我在发帖后不久就自己解决了它。 - Chris Stryker

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

我敢打赌,如果你进行调试,你会看到空指针异常。这是因为你尝试从尚未确定的位置中提取纬度和经度。在此提取周围加上if(loc! = null) {},并放置 progressDialog 以保持用户留在此处。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接