2013-04-17 72 views
3

我在我的应用程序中有一个gps类。在onLocationChanged方法中,我向我的活动发送一个处理程序消息,它应该执行一个asynctask。我的asyntask运行良好,如果我从活动的任何地方调用它,但是当它通过处理程序调用时,我会一直崩溃。我确信它与我如何从处理程序开始任务有关。从消息处理程序启动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); 
    } 

编辑处理程序:

在实际设备上运行后,存在堆栈跟踪。 (之前在仿真器上运行,这是一个我最初并没有意识到的不同信息)。 43

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) 

线路是:

getActivity().runOnUiThread(new Runnable() { 

的原因,我这样做,这是因为我需要能够从不执行LocationListener的活动检测locationChanged。所以这个想法是,在onLocationChanged我发送一条消息给我的活动,通知它更新。也许这对我来说是错误的方式?

+1

什么是AsyncTask的第107行? – FoamyGuy

+0

请分享更多代码以便更好地理解.. – Akhil

+0

'dist'则为null。 – FoamyGuy

回答

0

使用

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

,而不是

getActivity().runOnUiThread(new Runnable() { 

它应该工作..

+0

给了这个尝试,仍然从堆栈跟踪得到同样的东西。请欣赏帮助 – Badams

1

我结束了使用

handler.post(new Runnable() 

,而不是

0123得到这个工作
getActivity().runOnUiThread(new Runnable() 

那好像是start asynctask就好!当从处理程序调用asynctask时,它不能正常工作,但这与现在这个问题无关。我真的不明白为什么这样做,但它确实。