从错误的线程异常中调用

时间:2016-10-23 21:21:55

标签: java android multithreading

我有创建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();
                }
            }
        });
    }
}

我该如何解决这个问题?

2 个答案:

答案 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的类中。