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ます。

特に GPS については、getLastKnownLocation()を呼び出してからしばらく使用する必要があります。requestLocationUpdates()GPS が修正の提供を開始するまでに数十秒かかる場合があります。

コードを変更して の使用をなくし、メソッドgetLastKnownLocation()内ですでに場所が必要なロジックを使用してくださいonLocationChanged()。少なくとも、オブジェクトを探し、null locationそれを使用しようとしないでください。

于 2010-04-26T11:31:47.520 に答える
0

これは、デバイスで詳細な位置情報 (GPS) が有効になっていないために発生する可能性があります。または、マニフェストで ACCESS_FINE_LOCATION 権限が指定されていません。

于 2010-04-27T00:20:50.583 に答える
0

デバッグすると、null 例外が表示されるに違いありません。まだ修正されていない場所から緯度と経度を抽出しようとしているために発生します。この抽出を if (loc!=null) {} で囲み、progressDialog を配置してユーザーを保持します

于 2010-05-25T19:09:05.870 に答える
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 に答える