3

アプリケーションに gps クラスがあります。onLocationChanged メソッドで、asynctask を実行するはずのアクティビティにハンドラ メッセージを送信しています。私の非同期タスクは、アクティビティからどこでも呼び出すと単独で正常に実行されますが、ハンドラーを介して呼び出されるとクラッシュし続けます。ハンドラーからタスクを開始する方法に関係していると確信しています。

これは、非同期タスクを開始するはずのアクティビティフラグメントのハンドラーです

  public Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      Log.d("MainMenu_NearbyFragment", "handler recieved for on location changed");
      if (!sortingPlaces) {
        getActivity().runOnUiThread(new Runnable() {
          @Override
          public void run() {
            new sortNearby().execute();
          }
        });
      }
    }
  };

このように onLocationChanged からハンドラーにメッセージを送信しています

  public void onLocationChanged(Location location) {
    new MainMenu_NearbyFragment().handler.sendEmptyMessage(0);
  }

編集:

実機で実行した後のスタックトレースです。(以前はエミュレータで実行していましたが、これは最初は気付かなかった別のメッセージです)。

java.lang.NullPointerException
at  badams.android.alcology.fragments.MainMenu_NearbyFragment$1.handleMessage(MainMenu_NearbyFragment.java:43)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

43 行目は次のとおりです。

getActivity().runOnUiThread(new Runnable() {

これを行う理由は、LocationListener を実装していないアクティビティから locationChanged を検出できるようにする必要があるためです。つまり、 onLocationChanged で、更新するように通知するメッセージをアクティビティに送信しています。おそらく、これは私がこれにアプローチするための間違った方法ですか?

4

2 に答える 2