TextView.setText()崩溃我的应用程序

时间:2014-06-08 19:09:36

标签: android crash textview

我刚刚学习Android,而且我已经遇到了完整的基础知识问题:

我希望有一个计时器可以增加TextView,但是在计时器第一次打开时会崩溃。

这是我的代码:

public class Game extends Activity {

Timer timer = new Timer();
int i = 0;
TextView text;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);

    text = (TextView) findViewById(R.id.timerText); 
    text.setText("0");

    timer.schedule(new TimerTask() {
        public void run() {
            i++;
            System.out.println(i);
            text.setText(i + "");
            if(i>100) timer.cancel();
        }
    }, 1000, 1000);
}
}

这是我的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

...

<TextView
    android:id="@+id/timerText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="50dp"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

我找到了大量setText崩溃的解决方案,但似乎没有人解决这个问题。

3 个答案:

答案 0 :(得分:0)

看看这个:Android: Accessing UI Element from timer thread

移植:您遇到错误,因为您尝试从单独的后台线程访问UI元素(在您的情况下为textView)。

另外,用最简单的例子来看这个答案:https://stackoverflow.com/a/6702767/2956344

答案 1 :(得分:0)

如果您在计时器运行中访问UI元素,则应使用Handler与runOnUIThread。

请检查:

http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)

Android: Accessing UI Element from timer thread

答案 2 :(得分:0)

您需要从text.setText(i + "");

致电runOnUiThread()