2016-10-23 4 views
3

У меня есть активность, которая создает Thread для связи с сервером. Этот поток каждые несколько секунд получает строку. Я хотел бы добавить эту строку для отображения и отображения в активности (в 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) нить внутри рабочего потока. u может использовать asycktask и обновлять UI onPostExecute() метод asynctask – uguboz

ответ

0

Вернитесь к потоку пользовательского интерфейса, прежде чем манипулировать списком.

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

Если вы хотите использовать асинхронные операции в потоке пользовательского интерфейса я рекомендую вам использовать AsyncTask. Просто завершите выполнение потока в классе, который расширяет AsyncTask.

Смежные вопросы