簡體   English   中英

從不同的活動調用AsyncTask

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM