Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置EditText';时后台线程失败;s值_Java_Android_Multithreading - Fatal编程技术网

Java 设置EditText';时后台线程失败;s值

Java 设置EditText';时后台线程失败;s值,java,android,multithreading,Java,Android,Multithreading,我有一个线程调用MainActivies方法,该方法设置EditText的文本值,但失败了 MyRunnable是这样的: public class MyRunnable implements Runnable { MainActivity mController; public SoundTrigger(MainActivity pController) { mController = pController; } @Override

我有一个线程调用MainActivies方法,该方法设置EditText的文本值,但失败了

MyRunnable是这样的:

public class MyRunnable implements Runnable {

    MainActivity mController;

    public SoundTrigger(MainActivity pController) {
        mController = pController;
    }

    @Override
    public void run() {     
        for (int i = 0; i < 10000; i++) {

            if(i % 100) {
                mController.triggered(i);
            }

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
但它失败了。我只需要在edittext组件上打印由后台线程创建的实时数据。

如下所示:

public void triggered(int nNum) {

    EditTextInstance.setText(nNum+"");

}
 @Override
 public void run() {     

     for (int i = 0; i < 10000; i++) {
          if(i % 100) {
           mController.runOnUiThread(new Runnable() {
                 public void run() {
                    mController.triggered(i);
                 }
           });

    }

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
  }
}
@覆盖
public void run(){
对于(int i=0;i<10000;i++){
如果(i%100){
mController.rununuithread(新的Runnable(){
公开募捐{
mController.triggered(i);
}
});
}
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
说明:您之前将UI元素从非UI线程更改为非UI线程,这不好。这段代码应该可以工作,但它仍然不是解决问题的推荐方法。您应该使用类似的方法,其中您有一个用于“后台”操作(非ui线程操作)的模板方法和已经在ui线程上执行的“onPostExecute”


另一个附加说明:永远不要调用线程.sleep();在UI线程(又称主线程)上

ViewRootImpl.checkthread()行:60 logcatYes中没有任何内容,它可以工作。我在活动的triggered()方法中使用了runOnUIThread()方法。太棒了!但请考虑将代码与AcyCastRead相匹配。