Как загрузить ListView после завершения AsyncTask? - PullRequest
0 голосов
/ 25 февраля 2012

Я использую AsyncTask для получения данных, а затем загружаю их в ListView.Мой код:

AsyncTaskTwitterFeeds asyncTaskTwitterFeeds = new AsyncTaskTwitterFeeds(TwitterFeedsActivity.this);
    asyncTaskTwitterFeeds.execute("");
    loadList();

В приведенном выше коде после выполнения AsyncTask поток переходит к методу loadlist(), и программа завершается сбоем.Причина, по которой я обнаружил, заключалась в том, что массив, который используется в Adapter, все еще заполняется.Я хочу знать, что то, как я могу удержаться, выполняется AsyncTask и только после его завершения поток должен перейти к методу loadlist().Вот ошибка LogCat:

02-25 18:50:25.879: E/AndroidRuntime(19851): FATAL EXCEPTION: main
02-25 18:50:25.879: E/AndroidRuntime(19851): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cubix.twitterfeed/com.cubix.twitterfeed.TwitterFeedsActivity}: java.lang.NullPointerException
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.app.ActivityThread.access$1500(ActivityThread.java:132)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.os.Looper.loop(Looper.java:143)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.app.ActivityThread.main(ActivityThread.java:4196)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at java.lang.reflect.Method.invokeNative(Native Method)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at java.lang.reflect.Method.invoke(Method.java:507)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at dalvik.system.NativeStart.main(Native Method)
02-25 18:50:25.879: E/AndroidRuntime(19851): Caused by: java.lang.NullPointerException
02-25 18:50:25.879: E/AndroidRuntime(19851):    at java.util.Arrays$ArrayList.<init>(Arrays.java:47)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at java.util.Arrays.asList(Arrays.java:169)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:125)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at com.cubix.twitterfeed.TwitterAdapter.<init>(TwitterAdapter.java:17)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at com.cubix.twitterfeed.TwitterFeedsActivity.loadList(TwitterFeedsActivity.java:48)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at com.cubix.twitterfeed.TwitterFeedsActivity.onCreate(TwitterFeedsActivity.java:30)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
02-25 18:50:25.879: E/AndroidRuntime(19851):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780)
02-25 18:50:25.879: E/AndroidRuntime(19851):    ... 11 more

1 Ответ

5 голосов
/ 25 февраля 2012

AsyncTask имеет метод onPostExecute(), который выполняется в основном потоке пользовательского интерфейса после того, как AsyncTask завершил свою работу в методе doInBackground().Вы можете использовать этот метод для заполнения списка, если вызывается loadList(), чтобы заполнить список результатами из AsyncTask.

...