Java 安卓&x201C;只有创建视图层次结构的原始线程才能接触其视图;for循环中的错误
我尝试每半秒钟运行一次for循环。每次调用该循环时,该循环都会更改视图中的某些内容,但这些更改是由另一个类(即速度计)进行的Java 安卓&x201C;只有创建视图层次结构的原始线程才能接触其视图;for循环中的错误,java,android,multithreading,Java,Android,Multithreading,我尝试每半秒钟运行一次for循环。每次调用该循环时,该循环都会更改视图中的某些内容,但这些更改是由另一个类(即速度计)进行的 Thread thread=new Thread(){ @Override public void run() { float i; try { for ( i = 0; i <= 100; i++) {
Thread thread=new Thread(){
@Override
public void run() {
float i;
try {
for ( i = 0; i <= 100; i++) {
Speedometer1.onSpeedChanged(Speedometer1.getCurrentSpeed(i) + 8);
Speedometer2.onSpeedChanged(Speedometer2.getCurrentSpeed(i) + 8);
Speedometer3.onSpeedChanged(Speedometer3.getCurrentSpeed(i) + 8);
Speedometer4.onSpeedChanged(Speedometer4.getCurrentSpeed(i) + 8);
Speedometer5.onSpeedChanged(Speedometer5.getCurrentSpeed(i) + 8);
Speedometer6.onSpeedChanged(Speedometer6.getCurrentSpeed(i) + 8);
sleep(500);
}
}
catch (InterruptedException e)
{e.printStackTrace();}
}
};thread.start();
Thread-Thread=新线程(){
@凌驾
公开募捐{
浮点数i;
试一试{
对于(i=0;i您应该在runOnUIThread
中更新UI组件。示例代码为
runOnUiThread(new Runnable() {
@Override
public void run() {
//stuff that updates ui
}
});
这是因为任何视图只能在主线程或ui线程中修改。请尝试使用runOnUiThread()
运行onSpeedChanged()
。如下所示:
Thread thread=new Thread(){
@Override
public void run() {
float i;
try {
for ( i = 0; i <= 100; i++) {
runOnUiThread(new Runnable() {
public void run() {
Speedometer1.onSpeedChanged(Speedometer1.getCurrentSpeed(i) + 8);
Speedometer2.onSpeedChanged(Speedometer2.getCurrentSpeed(i) + 8);
Speedometer3.onSpeedChanged(Speedometer3.getCurrentSpeed(i) + 8);
Speedometer4.onSpeedChanged(Speedometer4.getCurrentSpeed(i) + 8);
Speedometer5.onSpeedChanged(Speedometer5.getCurrentSpeed(i) + 8);
Speedometer6.onSpeedChanged(Speedometer6.getCurrentSpeed(i) + 8)
}
});
sleep(500);
}
}
catch (InterruptedException e)
{e.printStackTrace();}
}
};thread.start();
Thread-Thread=新线程(){
@凌驾
公开募捐{
浮点数i;
试一试{
对于(i=0;i您不能从主线程外部修改视图
对象。即使您的速度表
类正在进行更改,它仍在您创建的次线程中运行
您可以创建一个Runnable
并使用deejay发布到由主线程创建的处理程序,或者使用其他类似技术来完成相同的操作。您应该在UI线程上更新UI
为此,请在onCreate()方法中创建一个处理程序:
然后调用单独线程中的处理程序在主线程上执行:
mHandler.post(new Runnable() {
@Override
public void run() {
// Update your UI
}
});
指的是完美的跑步…非常感谢Hanks,它成功了!
mHandler.post(new Runnable() {
@Override
public void run() {
// Update your UI
}
});