gpt4 book ai didi

java - 设置 EditText 的值时后台线程失败

转载 作者:行者123 更新时间:2023-11-29 21:08:55 24 4
gpt4 key购买 nike

我有一个调用 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();
}
}
}
}

在 MainActivity 类中,我触发的方法是这样的:

public void triggered(int nNum) {

EditTextInstance.setText(nNum+"");

}

但是失败了。我只需要打印一个由后台线程在 edittext 组件上创建的实时数据。

最佳答案

像这样:

 @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();
}
}
}

说明:您之前从非 UI 线程更改 UI 元素,这并不好。这段代码应该可以工作,但它仍然不是解决问题的推荐方法。你应该使用类似 AsyncTask 的东西您有一个用于“后台”操作(非 ui 线程操作)的模板方法和已经在 UI 线程上执行的“onPostExecute”。

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

关于java - 设置 EditText 的值时后台线程失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23586559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com