NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Timer v android aplikaci

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

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.