首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android简单计时器/计时器任务问题

Android简单计时器/计时器任务问题
EN

Stack Overflow用户
提问于 2012-10-11 11:38:45
回答 4查看 5.1K关注 0票数 4

我正在尝试让一个基本的计时器在安卓上工作,我在onCreate()方法中有以下代码:

代码语言:javascript
运行
复制
    editText = (EditText) findViewById(R.id.edit_message);
    Timer time = new Timer();     

    time.schedule(new TimerTask() {
        public void run() {
            timesince++;
            editText.setText("Timeran:"+timesince);
            Log.d("TIMER", "TimerTask run");
        }}, 0, 1000);

因此,希望它能用递增的值(timesince)更新文本框,在程序顶部声明-which,以及editText……

然而,(尽管我没有得到编译问题)当我在模拟器上运行它时,它根本不能工作。应用程序显示“blahblahblah已停止工作...”

我是不是做错了计时器?我遗漏了什么?

非常感谢。

(附注:如果删除此代码,则应用程序工作正常,因此我知道这一部分存在问题。)

编辑:我相信这是我的logcat输出,对不起,文字墙:

代码语言:javascript
运行
复制
10-11 03:40:49.260: E/AndroidRuntime(561): FATAL EXCEPTION: Timer-0
10-11 03:40:49.260: E/AndroidRuntime(561): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:3939)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:714)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:763)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:4012)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.view.View.invalidate(View.java:8454)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.widget.TextView.invalidateCursor(TextView.java:4319)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.widget.TextView.spanChange(TextView.java:7670)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:8020)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:898)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:614)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:520)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.text.Selection.setSelection(Selection.java:76)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.text.Selection.setSelection(Selection.java:87)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.text.method.ArrowKeyMovementMethod.initialize(ArrowKeyMovementMethod.java:302)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.widget.TextView.setText(TextView.java:3244)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.widget.TextView.setText(TextView.java:3110)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.widget.EditText.setText(EditText.java:78)
10-11 03:40:49.260: E/AndroidRuntime(561):  at android.widget.TextView.setText(TextView.java:3085)
10-11 03:40:49.260: E/AndroidRuntime(561):  at com.example.cultivation.MainActivity$1.run(MainActivity.java:54)
10-11 03:40:49.260: E/AndroidRuntime(561):  at java.util.Timer$TimerImpl.run(Timer.java:284)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-11 11:44:07

代码语言:javascript
运行
复制
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

这就是问题所在

您必须将更新ui的后台任务部分移动到主线程上,或者在UI线程中创建mHandler;

更新:

从计时器更新UI:http://android-developers.blogspot.com/2007/11/stitch-in-time.html

票数 3
EN

Stack Overflow用户

发布于 2012-10-11 11:48:48

或使用处理程序运行更新文本视图:

代码语言:javascript
运行
复制
     private final Runnable mRunnable1 = new Runnable() {

     public void run() {
        timesince++;
        editText.setText("Timeran:"+timesince);
        Log.d("TIMER", "TimerTask run");

 mHandler.postDelayed(mRunnable1, 1000);
 }

 };

并在OnCreate()方法mHandler.postDelayed(mRunnable1, 1000);中调用这一行

票数 2
EN

Stack Overflow用户

发布于 2012-10-11 11:46:06

尝试从UI线程更新TextView。尝试使用处理程序。在这里你可以找到一篇关于这方面的好文章。Update textview with the help of Handler

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12831826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档