2011-07-24 21 views
6

Mam bardzo prosty kod do czynienia z obsługą:Android, wiadomości Handler

Handler seconds=new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     bar.incrementProgressBy(5); 
     tView1.setText("r:"+msg); 
    } 
    }; 

i mój wątku:

Thread seconds_thread=new Thread(new Runnable() { 
       public void run() { 
       try { 
        for (int i=0;i<20 && isRunning.get();i++) { 
        Thread.sleep(1000); 

        Message m = new Message(); 
        Bundle b = new Bundle(); 
        b.putInt("what", 5); // for example 
        m.setData(b); 
        seconds.sendMessage(m); 



        } 
       } 
       catch (Throwable t) { 
        // just end the background thread 
       } 
       } 
      }); 

Jak widać powyżej próbuję zmienić wartość " what "w wiadomości, więc mogę robić różne rzeczy na podstawie wiadomości, ale zgodnie z" tView1.setText("r:"+msg) "wartość" what "nie zmienia się na 5 :(
wyświetla tylko" what=0 "

Jak zmienić wartości wiadomości, aby móc robić różne rzeczy na podstawie wiadomości?

Dzięki!

Odpowiedz

7

Musisz uzyskać dane z wiadomości (jako Bundle następnie jako int) wysłaniu w przewodnika zrobić:

Handler seconds=new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     int sentInt = msg.getData().getInt("what"); 
     bar.incrementProgressBy(5); 
     tView1.setText("r:"+Integer.toString(sentInt)); 
    } 
    }; 
+0

Czytanie o "pakiecie" na drugie pytanie o własne parametry http://developer.android.com/reference/android/os/ Bundle.html To prosta koncepcja. (Para klucza i wartości) –

+1

To działało idealnie! Dzięki! – Ryan

+0

Sposób, w jaki wyjaśniłeś koncepcję, którą łatwo było zrozumieć, gdy kliknąłem ten link i dotarło do "paczek", a co nie, przeleciało nad moją głową :( – Ryan

2

trzeba wyodrębnić wiadomości w taki sam sposób, w jaki dostał go:

public void handleMessage(Message msg) { 
    bar.incrementProgressBy(5); 
    Bundle data = msg.getData(); 
    tView1.setText("r:"+data.getInt("what")); 
} 

Przepraszamy za nie wyjaśniając, że w poprzedniej odpowiedzi ...

PS: Zignorowałem sprawdzanie null dla uproszczenia, ale należy sprawdzić, czy data jest null ...

+0

Ups, zaakceptowałem powyższe i zobaczyłem twoją odpowiedź, przegłosowałem to na samą myśl! Dzięki! – Ryan

+0

To nie ma znaczenia dla mnie :) ciesz się Androidem! – MByD

+1

Jeszcze raz dziękuję! To dzięki pomocnym ludziom takim jak ty, mam szansę "cieszyć się Androidem" :) – Ryan