Android Thread修改EditText

Mar*_*raj 3 java multithreading android android-edittext

我在修改由线程启动的另一个函数中的EditText时遇到问题:

Thread thRead = new Thread( new Runnable(){
    public void run(){
       EditText _txtArea = (EditText) findViewById(R.id.txtArea);
       startReading(_txtArea);
    }
 });
Run Code Online (Sandbox Code Playgroud)

我的功能如下:

public void startReading(EditText _txtArea){
         _txtArea.setText("Changed");
}
Run Code Online (Sandbox Code Playgroud)

在尝试修改edittext时,它总是强制关闭.有人知道为什么吗?

ina*_*ruk 5

不应从非UI线程修改UI视图.可触摸的UI视图的唯一线索是"主"或"UI"线程调用的一个onCreate(),onStop()和其他类似的组件生命周期功能.

因此,每当您的应用程序尝试从非UI线程修改UI视图时,Android会抛出一个早期异常,以警告您不允许这样做.这是因为UI不是线程安全的,这样的早期警告实际上是一个很棒的功能.


更新:

您可以使用Activity.runOnUiThread()更新UI.或者使用AsyncTask.但是,在您的情况下,您需要不断从蓝牙读取数据,AsyncTask不应使用.

这是一个例子runOnUiThread():

runOnUiThread(new Runnable() {            
    @Override
    public void run() {
        //this will run on UI thread, so its safe to modify UI views.
         _txtArea.setText("Changed");
    }
});
Run Code Online (Sandbox Code Playgroud)