Avatar
martinkobelka
Redaktor
Avatar
martinkobelka:

Zdravím

Mám timer v android aplikaci který by měl periodicky měnit obsah TextView, když chci ale zavolat v časovači na TextView metodu setText() tak aplikace spadne s chybou. Nemohl by mi prosím někdo poradit co to má znamenat? Níže je nefunkční kod

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

        Timer casovac = new Timer();

        MyTimerTask akce = new MyTimerTask();

        casovac.schedule(akce, 3000, 1500);

    }
class MyTimerTask extends TimerTask{

        public void run(){
            TextView nadpis = (TextView)findViewById(R.id.textView);
            nadpis.setText("Časovač funguje");

        }

    }

Zajímavé je, že když vymažu časovač a provedu to takto tak to funguje

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

        TextView nadpis = (TextView)findViewById(R.id.textView);
        nadpis.setText("Časovač funguje");

    }

Vysvětlil by mi prosím někdo v čem je ta chyba ?

 
Odpovědět 20.5.2015 19:30
Avatar
wgamez101
Člen
Avatar
Odpovídá na martinkobelka
wgamez101:

Upravovať grafické (UI) elementy môžeš iba z UI vlákna. V MyTimerTask máš metódu run() ktorá beží v inom vlákne než UI. Skús namiesto tohto

public void run() {
  TextView nadpis = (TextView)findViewById(R.id.textView);
  nadpis.setText("Časovač funguje");
}

dať toto

public void run() {
  runOnUiThread(new Runnable() {
    @Override
    public void run() {
        TextView nadpis = (TextView)findViewById(R.id.textView);
        nadpis.setText("Časovač funguje");
    }
  });
}
Editováno 21.5.2015 22:56
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 21.5.2015 22:56
Inspiration is for amateurs - I just get to work.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.