java-如何循环setText()-使应用程序崩溃
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何循环setText()-使应用程序崩溃,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2488字,纯文字阅读大概需要4分钟。
内容图文
![java-如何循环setText()-使应用程序崩溃](/upload/InfoBanner/zyjiaocheng/669/96267751391046c89aaf9fac53f97935.jpg)
我是Android编程的新手.现在,我想更新活动中的值并按时间间隔更改它,并将其设置为活动中的TextView.所以,这里的代码:
车类:
public class Car {
public int Speed;
public int RPM;
public int Distance;
public int Fuel;
public Car(int Speed, int RPM, int Distance, int Fuel) {
System.out.println(
"Inisialisasi Baru"+
"\nSpeed: "+ Speed +
"\nRPM: "+ RPM +
"\nDistance: "+ Distance +
"\nFuel: "+ Fuel
);
this.Speed = Speed;
this.RPM = RPM;
this.Distance = Distance;
this.Fuel = Fuel;
}
public int getSpeed() {
return Speed;
}
public int getRPM() {
return RPM;
}
public int getDistance() {
return Distance;
}
public int getFuel() {
return Fuel;
}
}
活动Java:
TextView carSpeed, carRPM, carDistance, carFuel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mock);
carSpeed = (TextView) findViewById(R.id.carSpeed);
carRPM = (TextView) findViewById(R.id.carRPM);
carDistance = (TextView) findViewById(R.id.carDistance);
carFuel = (TextView) findViewById(R.id.carFuel);
new Timer().scheduleAtFixedRate(new TimerTask(){
Car car = new Car(20, 20, 20, 5);
@Override
public void run(){
int maxSpeed = car.Speed + 5;
int minSpeed = car.Speed - 4;
int maxRPM = car.RPM + 5;
int minRPM = car.RPM - 4;
car.Speed = new Random().nextInt((maxSpeed - minSpeed) + 1) + minSpeed;
car.RPM = new Random().nextInt((maxRPM - minRPM) + 1) + minRPM;
car.Distance += 1;
car.Fuel -= 1;
if (car.Fuel <= 0) {
car.Fuel += 20;
}
if (car.Speed <= 0) {
car.Speed = 20;
} else if (car.Speed >= 150) {
car.Speed -= 50;
}
carSpeed.setText(Integer.toString(car.getSpeed()) + " km/h");
carRPM.setText(Integer.toString(car.getRPM()) + " rpm");
carDistance.setText(Integer.toString(car.getDistance()) + " km");
carFuel.setText(Integer.toString(car.getFuel()) + " l");
}
},0,5000);
}
我认为的问题是因为我试图在new Timer()中设置文本,这导致应用程序关闭.谢谢.
解决方法:
是的,您的直觉是正确的.发生问题的原因是正在从计时器更新视图.
该错误将类似于以下内容:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the
original thread that created a view hierarchy can touch its views.
在Android中,只能通过“ UI线程”(通常称为“主线程”)更新视图.
这里的问题是Runnable的run()方法在单独的线程中执行.
可以在活动的主线程上进行更新,如下所示:
...
runOnUiThread(new Runnable() {
@Override
public void run() {
// Do all your view updates in here
textView.setText("string");
}
});
....
我看不到您的代码的上下文,但是如果它是一个片段:
getActivity().runOnUiThread(…);
还有其他切换到主线程的方法.您可能还想研究AsyncTask和Handlers.
内容总结
以上是互联网集市为您收集整理的java-如何循环setText()-使应用程序崩溃全部内容,希望文章能够帮你解决java-如何循环setText()-使应用程序崩溃所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。