有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从消息处理程序启动异步任务

我的应用程序中有一个gps类。在onLocationChanged方法中,我向我的活动发送一条处理程序消息,该活动应该执行一个异步任务。如果我在活动的任何地方调用asyntask,我的asyntask本身运行良好,但当它通过处理程序调用时,我会不断遇到崩溃。我确信这与我如何从处理程序开始任务有关

这里是我的活动片段中的处理程序,它应该启动异步任务

  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();
          }
        });
      }
    }
  };

我正在从我的onLocation向处理程序发送消息,更改如下

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

编辑:

这是在实际设备上运行后的堆栈跟踪。(前一条消息是在emulator上运行的,这是一条不同的消息,我起初没有意识到)

java.lang.NullPointerException
at  badams.安卓.alcology.fragments.MainMenu_NearbyFragment$1.handleMessage(MainMenu_NearbyFragment.java:43)
at 安卓.os.Handler.dispatchMessage(Handler.java:99)
at 安卓.os.Looper.loop(Looper.java:137)
at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

第43行是:

getActivity().runOnUiThread(new Runnable() {

我这样做的原因是因为我需要能够从没有实现LocationListener的活动中检测locationChanged。因此,在onLocationChanged中,我向我的活动发送一条消息,通知它进行更新。也许这对我来说是错误的方法


共 (2) 个答案

  1. # 1 楼答案

    我最终通过使用

    handler.post(new Runnable()
    

    而不是

    getActivity().runOnUiThread(new Runnable() 
    

    这似乎开始了这项任务,很好!当从处理程序调用asynctask时,它不能正常工作,但现在这与这个问题无关。我真的不明白为什么会这样,但确实如此

  2. # 2 楼答案

    使用

    MainMenu_NearbyFragment.this.getActivity().runOnUiThread(new Runnable() {
    

    而不是

    getActivity().runOnUiThread(new Runnable() {
    

    它应该有用