2016-10-23 6 views
3

私は、サーバと通信するスレッドを作成するアクティビティを持っています。このスレッドは、数秒ごとにStringを受け取ります。私はこのリストを追加してListViewのアクティビティに表示したいが、それをしようとするとCalledFromWrongThreadExceptionが出る。間違ったスレッド例外からの呼び出し

class MyActivity() extends AppCompatActivity { 

    ArrayList<String> list; 
    ArrayAdapter<String> adapter; 

    public MyActivity(){ 

     ... 

     setContentView(R.layout.main); 

     list = new ArrayList<>(); 
     ListView myList = (ListView) findViewById(R.id.my_list); 
     adapter = new ArrayAdapter<>(this, R.layout.list_element, list); 

     myList.setAdapter(adapter); 

     Thread thread = new Thread(new Runnable(){ 
      @Override 
      public void run(){ 

       while(true){ 
         String dataFromServer = networkManager.receiveData(); 
         list.add(dataFromServer); 
         adapter.notifyDataSetChanged(); 
       } 
      } 
     }); 
    } 
} 

どうすればこの問題を解決できますか?

+0

ワーカースレッド内のメイン(UI)スレッドを更新できません。あなたはasynckaskを使用して、asynctaskのUI onPostExecute()メソッドを更新できます – uguboz

答えて

0

リストを操作する前にUIスレッドに切り替えます。

 list.post (new Runnable() 
     { 
     @Override public void run() 
     { 
      String dataFromServer = networkManager.receiveData(); 
      list.add(dataFromServer); 
      adapter.notifyDataSetChanged(); 
     } 
     }); 
0

UIスレッドで非同期操作を使用する場合は、AsyncTaskを使用することをお勧めします。 AsyncTaskを拡張するクラスでスレッドの実行をラップするだけです。

関連する問題