[英]Call AsyncTask From Different Activities
考虑mainActivity中的代码,我们像这样使用AsyncTask
new SearchTask(SearchPage.this).execute("1", query);
获得结果并将其显示在列表中后,用户单击一个项目,然后迁移到另一个活动。 在第二个活动中,我们必须显示所选项目的完整数据,并且要从Internet检索数据,我们必须使用以下代码行:
new SearchTask(DetailsPage.this).execute("2", id);
new SearchTask(DetailsPage.this).execute("3", id);
但问题是这些行不起作用:/甚至应用程序崩溃或不显示数据...。如何解决此问题?
UPDATE这里是我的日志猫,导致这些代码行不返回任何数据,应用崩溃会抛出NPE
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shahroozevsky.myfirstapp/com.shahroozevsky.myfirstapp.DetailsPage}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
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)
Caused by: java.lang.NullPointerException
at com.shahroozevsky.myfirstapp.DetailsPage.onCreate(DetailsPage.java:51)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
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)
看来您的实际问题是,这里缺少良好的代码设计:
一些想法
Events
来跟踪第一个AsyncTask
然后触发第二个调用。 event
类; SERIAL_EXECUTOR_THREAD
上调用AsyncTask
; 只需花一点时间就可以使您免于头痛。
EventBus是一个简单的Android库,您可以在这里找到。
祝好运!
使用IntentService +事件总线(例如Otto )
您可以从任何活动启动IntentService,并且它会在后台进行计算。 完成后,您将使用事件总线发送一个包含结果的事件。
问题出在您的DetailsPage
活动onCreate
方法(第51行)上。 核实
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.