1

次のコード行からヌル ポインター例外が発生します。

    double longitude = location.getLongitude();

問題が何であるかを理解するのに問題があります。

    LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, waypointActivity);

    //LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double longitude = location.getLongitude();
    double latitude = location.getLatitude();
    String locLat = String.valueOf(latitude)+","+String.valueOf(longitude);

logcat の出力は次のとおりです。

04-30 10:20:54.988: E/AndroidRuntime(1827): FATAL EXCEPTION: main
04-30 10:20:54.988: E/AndroidRuntime(1827): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.app.LoadedApk.makeApplication(LoadedApk.java:504)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4364)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.app.ActivityThread.access$1300(ActivityThread.java:141)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.os.Looper.loop(Looper.java:137)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.app.ActivityThread.main(ActivityThread.java:5041)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at java.lang.reflect.Method.invokeNative(Native Method)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at java.lang.reflect.Method.invoke(Method.java:511)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at dalvik.system.NativeStart.main(Native Method)
04-30 10:20:54.988: E/AndroidRuntime(1827): Caused by: java.lang.NullPointerException
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:379)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.app.LoadedApk.getClassLoader(LoadedApk.java:322)
04-30 10:20:54.988: E/AndroidRuntime(1827):     at android.app.LoadedApk.makeApplication(LoadedApk.java:496)
04-30 10:20:54.988: E/AndroidRuntime(1827):     ... 11 more
04-30 10:21:04.048: E/Trace(1863): error opening trace file: No such file or directory (2)

ロケーション変数が null であると考える理由がわかりません。任意の提案をいただければ幸いです。

4

3 に答える 3

0

LocationManager.GPS_PROVIDER携帯電話の GPS を使用して位置情報にアクセスする)位置情報にアクセスするのに時間がかかるため、位置情報が null として取得されます。locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)

位置オブジェクトをグローバルにし、 waypointActivity で実装されたonLocationChangedメソッドでこのオブジェクトを初期化しますLocationListener

このようなもの:-

@Override
public void onLocationChanged(Location location) {
    this.location = location;
}

次に、次のように使用する前に、場所が null でないかどうかを確認します。

    if (location!=null){
       double longitude = location.getLongitude();
       double latitude = location.getLatitude();
       String locLat = String.valueOf(latitude)+","+String.valueOf(longitude);
    }

LocationManager.NETWORK_PROVIDERよりもはるかに高速に結果が得られるため、instedを使用することをお勧めしますGPS_PROVIDER

于 2013-04-30T16:30:13.557 に答える
0

これは「修正」ではなく、「回避策」です。

私の GPS 位置情報にも同じ問題がありますが、私の位置情報は「adb 経由でアプリを再インストールした後に最初に返された位置情報」であるように見えますが、これはプロバイダーがまだ初期化されていないことを意味します。(アプリを再インストールすると、以前の既知の場所が削除されるため)

これにより、達成しようとしていた GPS タスクはすべて失敗し、最初にトリガーされたとき (すべてのプロバイダー) に null が返されますが、再起動すると期待どおりに動作します。

私はスーパーバイザーと大学から、単に gps の更新を開始して最初の場所を破棄し、すぐに次の場所に移動して、そこから通常どおりに処理することで問題を回避するようにアドバイスされました (それ以降に返された null の場所を検出および/または処理する)。予期しない動作)

これは私にとっては目的を果たしていますが、これが実際にどのように解決されることになっているのか、まだ興味がありますか?

これが、誰かがその間も働き続けるのに役立つことを願っています。

于 2020-02-22T14:27:18.573 に答える