Android таймер обработчик - PullRequest
       16

Android таймер обработчик

0 голосов
/ 06 сентября 2010

Я использую этот код:

public class newtimer extends Activity {

    private Timer myTimer;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        myTimer = new Timer();
        myTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                TimerMethod();
            }

        }, 0, 1000);
    }

    int number = 0;

    private void TimerMethod()
    {
        //This method is called directly by the timer
        //and runs in the same thread as the timer.

        //We call the method that will work with the UI
        //through the runOnUiThread method.

        Toast.makeText(this, "TimerMethod Running "+number, Toast.LENGTH_SHORT).show();

        this.runOnUiThread(Timer_Tick);
    }

    private Runnable Timer_Tick = new Runnable() {
        public void run() {

            //This method runs in the same thread as the UI.
            //Do something to the UI thread here

            Toast.makeText(getBaseContext(), "UI Thread Running "+number, Toast.LENGTH_SHORT).show();

        }
    };
}

Когда я запускаю его, я получаю это исключение в logcat:

09-06 21: 39: 39.701: ОШИБКА / AndroidRuntime(1433): java.lang.RuntimeException: не удается создать обработчик внутри потока, который не вызвал Looper.prepare ()

1 Ответ

0 голосов
/ 06 сентября 2010

Я бы предположил, что проблема в Toast.makeText(this, "TimerMethod Running "+number, Toast.LENGTH_SHORT).show(); в вашей функции TimerMethod - вы не можете вызывать какие-либо функции, относящиеся к пользовательскому интерфейсу, из рабочих потоков. Поскольку у вас уже есть тост в той части, которая выполняется в потоке пользовательского интерфейса, почему у вас есть еще один в TimerMethod?

Для отладки я бы рекомендовал использовать Log как можно больше вместо Toast.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...