我在我的应用中有一个 GPS 类。在 onLocationChanged 方法中,我会向我的活动发送一个 handler 消息,该消息应执行一个异步任务。如果我从活动的任何位置调用它,我的异步任务本身就可以正常运行,但是当通过 handler 调用它时,我一直在遇到崩溃。我确定这与我如何从 handler 启动任务有关。
这是我的活动片段中的 handler,它应该启动异步任务。
我正在使用onLocationChanged方法将消息发送到处理程序,方法如下:
第43行是:
这是我的活动片段中的 handler,它应该启动异步任务。
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接口的活动之外的位置变化。所以我的想法是,在onLocationChanged中向我的活动发送一条消息,通知它更新。也许这不是我解决问题的正确方式?