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

4 回答 4

3

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

getLastKnownLocation()打电话后才能使用requestLocationUpdates(),尤其是 GPS。GPS 可能需要几十秒才能开始提供修复。

请更改您的代码以消除您对方法的使用,getLastKnownLocation()并仅使用需要该位置的逻辑onLocationChanged()。至少,寻找一个null location对象,不要试图使用它。

于 2010-04-26T11:31:47.520 回答
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();
于 2010-04-26T23:00:15.437 回答
0

这可能是因为您的设备上未启用精确定位 (GPS)。或者您的清单中未指定 ACCESS_FINE_LOCATION 权限。

于 2010-04-27T00:20:50.583 回答
0

我敢打赌,如果你调试你会看到空异常。之所以会发生这种情况,是因为您试图从尚未修复的位置提取纬度和经度。用 if (loc!=null) {} 包围这个提取并将progressDialog 放在那里

于 2010-05-25T19:09:05.870 回答