在textView中的android应用程序中显示秒表
我使用com.apache.commons库设置了秒表,秒表似乎工作正常。我不知道如何在我的应用程序的文本视图中显示这个秒表。一般来说,我不知道这将如何工作,也就是说,如果秒表上的时间不断变化,那么秒表将如何准确地显示在文本视图中?目前,我有下面的代码,它每秒更新一次textView中的文本,持续了大约2秒钟,然后我得到了一个奇怪的错误。我甚至不确定这样做是否正确。请帮忙在textView中的android应用程序中显示秒表,android,Android,我使用com.apache.commons库设置了秒表,秒表似乎工作正常。我不知道如何在我的应用程序的文本视图中显示这个秒表。一般来说,我不知道这将如何工作,也就是说,如果秒表上的时间不断变化,那么秒表将如何准确地显示在文本视图中?目前,我有下面的代码,它每秒更新一次textView中的文本,持续了大约2秒钟,然后我得到了一个奇怪的错误。我甚至不确定这样做是否正确。请帮忙 Timer timer = new Timer(); TimerTask timerTask
Timer timer = new Timer();
TimerTask timerTask;
timerTask = new TimerTask() {
@Override
public void run() {
timeText.setText(time.toString());
}
};
timer.schedule(timerTask, 0, 1000);
我在2秒后得到的错误(它成功地更新了时间)是:
“只有创建视图层次结构的原始线程才能接触其视图”您只能在UI线程上更新
TextView
runOnUiThread(new Runnable() {
@Override
public void run() {
//stuff that updates ui
}
});
您的代码变为
Timer timer = new Timer();
TimerTask timerTask;
timerTask = new TimerTask()
{
@Override
public void run()
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
timeText.setText(time.toString());
}
});
}
};
timer.schedule(timerTask, 0, 1000);
如果出现错误,您可能必须执行myActivityObject.runOnUiThread()
有关更多详细信息,请参阅。您只能在UI线程上更新
TextView
runOnUiThread(new Runnable() {
@Override
public void run() {
//stuff that updates ui
}
});
您的代码变为
Timer timer = new Timer();
TimerTask timerTask;
timerTask = new TimerTask()
{
@Override
public void run()
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
timeText.setText(time.toString());
}
});
}
};
timer.schedule(timerTask, 0, 1000);
如果出现错误,您可能必须执行myActivityObject.runOnUiThread()
有关详细信息,请参阅。要从另一个线程更新视图,应使用处理程序
private void startTimerThread() {
Handler handler = new Handler();
Runnable runnable = new Runnable() {
private long startTime = System.currentTimeMillis();
public void run() {
//Change the condition for while loop depending on your program logic
while (true) {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable(){
public void run() {
timeText.setText(time.toString());
}
});
}
}
};
new Thread(runnable).start();
}
要从另一个线程更新视图,应使用处理程序
private void startTimerThread() {
Handler handler = new Handler();
Runnable runnable = new Runnable() {
private long startTime = System.currentTimeMillis();
public void run() {
//Change the condition for while loop depending on your program logic
while (true) {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable(){
public void run() {
timeText.setText(time.toString());
}
});
}
}
};
new Thread(runnable).start();
}
发生此错误之前它运行了多长时间?您无法通过线程访问UI组件。使用
UIThread
而不是在发生此错误之前它运行了多长时间?您无法通过线程访问UI组件。改用UIThread