gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:21:56 25 4
gpt4 key购买 nike

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

这是我的 Activity fragment 中的处理程序,它应该启动异步任务

  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 的 Activity 中检测到 locationChanged。所以我的想法是,在 onLocationChanged 中,我向我的 Activity 发送一条消息,通知它更新。也许这是我处理这个问题的错误方法?

最佳答案

我最终通过使用

得到了这个工作
handler.post(new Runnable()

代替

getActivity().runOnUiThread(new Runnable() 

这似乎可以很好地启动异步任务!从处理程序调用时,asynctask 无法正常工作,但现在与此问题无关。我真的不明白为什么会这样,但确实如此。

关于java - 从消息处理程序启动异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16066332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com