我在其中一個類上使用AsyncTask,但無法使用onPostExecute方法更新視圖。在主類上,我使用ActionBar將選項卡更改爲結果選項卡。查詢結果將在哪裏以列表格式顯示。我正在使用寧靜的服務,併成功從服務器獲取列表。我正在嘗試更新結果選項卡(位於主類中)以顯示查詢的結果。迄今爲止不成功,任何幫助將不勝感激,謝謝。使用AsyncTask但無法使用onPostExecute方法更新視圖
PS。在更改爲結果選項卡並從服務器獲取列表後,我確實運行了onPostExecute方法,但無法從AsyncTask類更新main中的視圖。我還需要提及的是,我還有onProgressUpdate方法「我只是在日誌貓中輸出一個字符串以確保它被調用」。以及doInBackground方法都可以正常工作,只是無法正確更新視圖。另外,因爲我從不同的類更新main,所以我使listview和adapter成爲靜態的,所以我可以從asyncTask類調用它們,在我看來這是有道理的,但這可能是我錯誤的地方,你可以看到onPostExecute方法。謝謝。
主類onCreate方法:在主類
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bar = getActionBar();
bar.addTab(bar.newTab().setText("Basic\nSearch").setTabListener(this));
bar.addTab(bar.newTab().setText("Advanced\nSearch").setTabListener(this));
bar.addTab(bar.newTab().setText("Results").setTabListener(this));
//bar.addTab(bar.newTab().setText("Exit").setTabListener(this));
bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_USE_LOGO);
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayShowHomeEnabled(true);
// remove the activity title to make space for tabs
bar.setDisplayShowTitleEnabled(false);
bar.setDisplayUseLogoEnabled(false);
}
方法改變標籤,結果標籤和查詢服務器:
public void basicSubmitButton(View view) throws InterruptedException {
String query = myBasicEditText.getText().toString();
bar.setSelectedNavigationItem(2);
ReadWebpageAsyncTask basicSubmission = new ReadWebpageAsyncTask();
basicSubmission.query(query);
}
的AsyncTask方法的onCreate:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.results);
}
onPostExecute方法:
protected void onPostExecute(String result) {
Hummedia.myListView = (ListView) findViewById (R.id.lv);
Hummedia.myListView.setTextFilterEnabled(true);
Hummedia.myListView.clearChoices();
Hummedia.adapter = new ArrayAdapter<String>(ReadWebpageAsyncTask.this,
android.R.layout.simple_list_item_1,
mediaList);
//wait();
Hummedia.myListView.setAdapter(Hummedia.adapter);
}
這裏是堆棧跟蹤輸出時,它試圖通過onPostExecute方法以更新主要的觀點:
12-26 18:21:48.916: D/AndroidRuntime(536): Shutting down VM
12-26 18:21:48.916: W/dalvikvm(536): threadid=1: thread exiting with uncaught exception (group=0x409951f8)
12-26 18:21:49.067: E/AndroidRuntime(536): FATAL EXCEPTION: main
12-26 18:21:49.067: E/AndroidRuntime(536): java.lang.NullPointerException
12-26 18:21:49.067: E/AndroidRuntime(536): at android.app.Activity.findViewById(Activity.java:1794)
12-26 18:21:49.067: E/AndroidRuntime(536): at edu.byu.hummedia.ReadWebpageAsyncTask$DownloadWebPageTask.onPostExecute(ReadWebpageAsyncTask.java:132)
12-26 18:21:49.067: E/AndroidRuntime(536): at edu.byu.hummedia.ReadWebpageAsyncTask$DownloadWebPageTask.onPostExecute(ReadWebpageAsyncTask.java:1)
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.AsyncTask.finish(AsyncTask.java:602)
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.AsyncTask.access$600(AsyncTask.java:156)
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 18:21:49.067: E/AndroidRuntime(536): at android.os.Looper.loop(Looper.java:137)
12-26 18:21:49.067: E/AndroidRuntime(536): at android.app.ActivityThread.main(ActivityThread.java:4340)
12-26 18:21:49.067: E/AndroidRuntime(536): at java.lang.reflect.Method.invokeNative(Native Method)
12-26 18:21:49.067: E/AndroidRuntime(536): at java.lang.reflect.Method.invoke(Method.java:511)
12-26 18:21:49.067: E/AndroidRuntime(536): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-26 18:21:49.067: E/AndroidRuntime(536): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-26 18:21:49.067: E/AndroidRuntime(536): at dalvik.system.NativeStart.main(Native Method)