我有创建Thread与服务器通信的活动。这个线程每隔几秒就会收到一个String。我想将此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 :(得分:0)
在操作列表之前切换回UI线程。
list.post (new Runnable()
{
@Override public void run()
{
String dataFromServer = networkManager.receiveData();
list.add(dataFromServer);
adapter.notifyDataSetChanged();
}
});
答案 1 :(得分:0)
如果您想在UI线程中使用异步操作,我建议您使用AsyncTask。只需将您的线程执行包装在扩展AsyncTask的类中。