Java 运行中的Android TextView问题()
错误在于Java 运行中的Android TextView问题(),java,android,multithreading,textview,Java,Android,Multithreading,Textview,错误在于findViewByIdmy标签为lbtcper 我之所以在run()中使用它,是因为该块需要运行,直到值达到100 我知道,通常情况下,您必须在视图v中插入,但它会否定void run() 我寻找了一些解决方案,但还没有找到一个有效的例子 我也相信我昨天已经发布了这篇文章,但我似乎在任何地方都找不到。它不在我的帐户下,我清楚地记得我发布了它并等待回复。findViewById()是Android或Windows的一个功能。您的BTCSync类不扩展这两个类 很可能更适合您的需求。除了f
findViewById
my标签为lbtcper
我之所以在run()
中使用它,是因为该块需要运行,直到值达到100
我知道,通常情况下,您必须在视图v中插入,但它会否定void run()
我寻找了一些解决方案,但还没有找到一个有效的例子
我也相信我昨天已经发布了这篇文章,但我似乎在任何地方都找不到。它不在我的帐户下,我清楚地记得我发布了它并等待回复。findViewById()
是Android或Windows的一个功能。您的BTCSync
类不扩展这两个类
很可能更适合您的需求。除了findViewById问题之外,您正在尝试在非UI线程上执行UI工作。您需要使用runOnUiThread(),否则会发生崩溃:
class BTCSync extends Thread{
public void run(){
while(!BTC && MainPage.BTC){
TextView BTCPer = (TextView) findViewById(R.id.lblBTCPer);
BTCPer.setText(BTCProgress+"%");
if(BTCProgress == 100) {
BTCPer.setText("100%");
BTC = true;
}
}
}
}
Android应用程序只有一个UI线程,并且Android UI工具包不是线程安全的,必须始终在UI线程上操作 为了在其他线程中更新ui,您可以使用
处理程序
,下面是
这里有一个好的Android禁止在UI线程之外更改UI(例如设置文本视图的文本) 如果你能打这个电话
runOnUiThread(new Runnable() {
@Override
public void run() {
BTCPer.setText(BTCProgress+"%");
if(BTCProgress == 100) {
BTCPer.setText("100%");
BTC = true;
}
}
});
这意味着线程是在活动中定义的,因为findViewById()
不是thread
的函数。在这种情况下:
TextView BTCPer = (TextView) findViewById(R.id.lblBTCPer);
class BTCSync extends Thread{
public void run(){
while(!BTC && MainPage.BTC){
TextView BTCPer = (TextView) findViewById(R.id.lblBTCPer);
// make sure you enable lambdas
runOnUiThread(() -> BTCPer.setText(BTCProgress+"%"));
if(BTCProgress == 100) {
BTCPer.setText("100%");
BTC = true;
}
}
}