[英]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.