2012-02-23 48 views
1

我試圖在後臺運行函數doTask()時崩潰。我正在嘗試使用新線程(new Runnable(){}),它僅適用於此部分: handlerForBar.post(new Runnable(){public void run(){doTask();}}) 但progressBar出現時doTask()的工作已完成。所以我認爲AsyncTask可以工作,但它崩潰了。 *的.java的AsyncTask在doInBackground中崩潰,添加到列表視圖

public void doTask() 
       { 

       ListView listView = (ListView)findViewById(R.id.list); 

       myArray = new ArrayList<HashMap<String,Object>>(); 
       HashMap<String, Object> hash_map; 

       hash_map = new HashMap<String, Object>(); 
       hash_map.put(NICK_KEY, "nick"); 

       myArray.add(hash_map); 
       listView.setAdapter(new myListAdapter(myArray,this)); 
       new myListAdapter(myArray,this).notifyDataSetChanged(); 
       } 



private class myThread extends AsyncTask<String, Void, String> { 

      @Override 
      protected String doInBackground(String... params) { 

       doTask(); //try, catch also FC 
      return null; 
      } 

      ... 
     } 

結構:

> public class mainActivity extends Activity{} 
>      public void onCreate() 
>         new myThread().execute("");  
>      public void doTask() 
>      private class myThread extends AsyncTask<String, Void, String>{} 
>         protected String doInBackground() 
>             doTask() 
>      private class myListView extends BaseAdapter 

回答

2

列出您無法觸摸doInBackground中的用戶界面,因此必須使用onProgressUpdateonPostExecute等方法更新UI。見here

2

你不能在doInBackground方法操縱的ListView。而是在onPostExecute中執行此操作。總之,所有這些都需要用戶界面更新的操作需要在UI線程中完成的,並在的AsyncTask它在後期的工作執行

提示:在doInBackground適配器插入的項目,然後將其設置在onPostExecute