2012-02-23 18 views
1

doTask()関数をバックグラウンドで実行しようとするとクラッシュします。私は新しいThread(新しいRunnable(){})を試していましたが、このセクションのみが動作します: handlerForBar.post(new Runnable(){public void run(){doTask();}}) 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でUIをタッチすることはできません。onProgressUpdateonPostExecuteなどの方法でUIを更新する必要があります。 here

2

あなたはdoInBackground方法でListViewコントロールを操作傾けます。代わりにonPostExecuteでこれを実行します。要するに、UIの更新を必要とするすべての操作は、UIスレッド上で実行する必要があり、AsyncTaskにそれが

ヒント実行ポストに動作します:doInBackgroundであなたのアダプタの項目を挿入し、onPostExecute

関連する問題