IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Timer v android aplikaci

Aktivity
Avatar
martinkobelka
Tvůrce
Avatar
martinkobelka:20.5.2015 19:30

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:21.5.2015 22:56

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.5.2015 22:56
There are only two kinds of programming languages: those people always bitch about and those nobody uses. -- Bjarne...
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.