1 Востаннє редагувалося shabaranskij (11.12.2015 23:09:30)

Тема: Використання Timer. Що не так?

Що я роблю не так? І як треба робити?

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
public TextView text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text=(TextView) findViewById(R.id.text);
        Timer timer=new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run()
            {
                int i = 0,f;
                i++;
                f=(int) Math.round(Math.random()%i);
text.setText(Integer.toString(i));
            }
        },0,100);
    }
}

Програма аварійно завершується

2

Re: Використання Timer. Що не так?

Я не експерт тут, але дебаг має домогти у вирішенні цієї проблеми :)

3

Re: Використання Timer. Що не так?

1) у методі run() щось страшне відбувається. змінна "i" ініціалізується у методі і відразу плюсується на 1 = завжди при всіх виконаннях вона буде рівна одиниці
2) метод run() виконується у потоці, а у потоці не можна працювати з інтерфейсом (у Вашому випадку з TextView). Тому треба виконувати такі блоки у головному потоці. Для цього використовується або метод runOnUiThread(Runnable action) або ще краще використовувати для обробки таких конструкцій Handler

Подякували: Master_Sergius1