1

私はここでちょっと迷っています..基本的に、ユーザーの一般的な場所を可能な限り高速で軽量な方法で取得する必要があります。これは私が持っているコードです

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);                 
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);

provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
Log.d(TAG,"Lat - " + (location.getLatitude()) + " long - " + (location.getLongitude()));

昨日は完璧に機能しましたが、今日はLog.dアクセスしようとするとNull Pointerエラーが発生しますlocation。このアプリを 2 人の友人に送ったところ、彼らの電話では正常に動作しました。コードをより堅牢にするために変更できるものはありますか? 携帯電話のクラッシュの原因は何ですか?

編集 - マップで GPS ロックを取得し、アプリに戻りましたが、それでもクラッシュします..

4

4 に答える 4

2
Location location = locationManager.getLastKnownLocation(provider);

これは常に場所を返すとは限りません。実際、それは何度も与えNULLます。

場所が かどうかを常に確認する必要がありNULLます。

if(location != null){
      Log.d(TAG,"Lat - " + (location.getLatitude()) + " long - " + (location.getLongitude()));
}

null ロケーションの理由は、provider's LastKnownLocationが期限切れ (古いタイムスタンプ) である可能性があります。

于 2013-04-03T05:40:39.933 に答える
1

ここでリファレンスをチェックアウトした場合https://developer.android.com/reference/android/location/LocationManager.html#getLastKnownLocation(java.lang.String) ; あなたはそれを見るでしょうgetLastKnownLocation

プロバイダーの最後の既知の場所、または null を返します

そうです、あなたのlocationオブジェクトは時々nullになることがあります。なぜそれが起こるのか分かりませんが、そうです。デバイスが位置情報サービスを使用していない期間が長いと、より頻繁に発生するように感じます.

于 2013-04-03T05:40:26.230 に答える
1

Wi-Fi が利用できない場合、セル タワーが使用されるため、使用するデータが制限を超えると費用が発生する可能性があります。したがって、ネットワークのコストは true です。したがって、変更すると

criteria.setCostAllowed(true);  

あなたは大丈夫だろう。

于 2013-04-03T05:43:15.690 に答える
0

あなたの場所はnullなので、エラーが発生する可能性があります

if(location != null){
      Log.d(TAG,"Lat - " + (location.getLatitude()) + " long - " + (location.getLongitude()));
}

ロケーションデモ

于 2013-04-03T05:43:31.693 に答える