3

この行で nullpointerexception が発生しています:

double latitude = location.getLatitude();

問題を引き起こしているコードのブロックは次のとおりです。

//Get the current location
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);

//Zooms into the current location when the activity is started
double latitude = location.getLatitude();
double longitude = location.getLongitude();

Location 変数と LocationManager 変数を初期化するときに nullpointerexception が発生するのはなぜですか? コードの何が問題になっていますか?

4

4 に答える 4

1

電話で実際に場所の更新をリッスンしているものがない場合、電話は最後の既知の場所を更新しません。この場合、値が古すぎると null が返されます (そうでない場合、非常に古いデータが返される可能性があります)。場所を確実に取得したい場合は、自分で更新に登録する必要があります。次に、最初の更新が発生した後、いつでも getLastKnownLocation を呼び出すことができます。

于 2013-05-28T19:21:39.167 に答える
0

によって返される場所はlocationManager.getLastKnownLocation(provider)null でなければなりません。位置情報にアクセスするために必要なすべての権限がアプリにマニフェストに含まれていることを確認してください。getBestProvider(...)また、試してみることをお勧めするのではなく、

Location location_gps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location_network = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

どちらかまたは両方が null かどうかを確認します。あなたも見ることができます

bool isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
bool isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

そこに問題があるかどうかを確認します。

より包括的な方法は、「LocationListener」ロケーション リスナー サービスを実装するクラスを作成して、ロケーションの更新を登録することです。getLastKnownLocation の問題は、それが古いか null である可能性があることです。残念ながら、アプリを信頼できるものにしたい場合は、おそらく必要です。

于 2013-05-28T19:08:38.977 に答える
0

この行は、間違いなく not-null になるという意味ではありませんLocation

Location location = locationManager.getLastKnownLocation(provider);

null「最後に知られている」場所がないという理由だけで取得しています。

于 2013-05-28T19:07:07.113 に答える
0

AndroidManifest.xml ファイルのアクセス許可と共に、ロケーション リスナーを登録しましたか?

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS, 100, 1, locationListener);

次に、この場合locationListenerは 、タスクを完了する方法を用意します

private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
    latitude = location.getLatitude();
    longitude = location.getLongitude();
}

ここでトップの回答を参照してください: SDK の 'getLastKnownLocation' から null を取得する

于 2013-05-28T19:00:49.033 に答える