TextView.setText() сбой моего приложения

Я только изучаю 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 ответа

Решение

Вам нужно позвонить text.setText(i + ""); от runOnUiThread()

Посмотрите на это: Android: доступ к элементу пользовательского интерфейса из потока таймера

Объяснение: у вас ошибка, потому что вы пытаетесь получить доступ к элементу пользовательского интерфейса (в вашем случае - textView) из отдельного фонового потока.

Также посмотрите этот ответ на упрощенном примере: /questions/21462125/tajmer-android-obnovlyaet-tekstovoe-predstavlenie-ui/21462158#21462158

Если вы получаете доступ к элементу пользовательского интерфейса при запуске таймера, вы должны использовать Handler или runOnUITheard.

Пожалуйста, проверьте:

http://developer.android.com/reference/android/app/Activity.html

а также

Android: доступ к элементу пользовательского интерфейса из потока таймера

Другие вопросы по тегам