MessageHandler verliert Message-Inhalt

F

fugu2.0

Neues Mitglied
3
Ich mal wieder ...

langsam bin ich echt am verzweifeln. Folgendes:
Ich habe einen Parser geschrieben, der eine JSON-Antwort von einem Server ausliest. Das ganze läuft als Thread mit Looper. Sinn soll es sein, nicht alles auf einmal zu parsen, sondern immer nur stückchenweise, deswegen der Thread. Ist die komplette Antwort geparst, halte ich den Thread mit wait() an, um ihn dann später mit notify wieder aufwecken zu können. Ich zeig euch mal kurz den Aufbau

Code:
public void run() {
  Looper.prepare();
  parserHandler = new Handler(){
    public void handleMessage(Message msg) {
      synchronized(this){
        String id = msg.getData().getString("id");
        try {
          switch(msg.what) { 
          case 0: {
            //hole die Antwort (response) vom Server
            if (response != null) {
              if (!response.isNull("has_more")){ //gibt es noch mehr Datensätze?
                //verarbeite den ersten Teil, erhöhe den Offset und parse später weiter
              } else {
                //verarbeite den letzten Teil, dann warte  
                this.wait();
                Log.i("","@JSONPP:handleMessage nach wait()");
              }
            } else {
              Log.e("Parser:PARSE_SHOPS","ServerResponse == null");
            }
            break;
          }
          case 1: {
            //mach was anderes
          }
          //weitere case-Anweisungen
          //catch-Anweisungen
        }
      } 
    };
    Looper.loop();
}
das ist so grob die Funktionalität im Parser. Jetzt starte ich meine Activity, lass parsen (10 Datensätze), scroll dann nach unten, damit die nächsten (letzten) 10 Datensätze geparst werden, und starte die nächste Activity. Der Parser befindet sich jetzt im wait-Zustand. Damit ich wieder neu parsen kann mach ich folgendes:

Code:
parserHandler = parser.getParserHandler();
Message parserMessage = new Message();
Bundle data = new Bundle();
data.putString("id", realId);
parserMessage.setData(data);
parserMessage.what = 1;
        
 synchronized (parserHandler) {
  parserHandler.notify();
  parserHandler.sendMessage(parserMessage);
}
Und jetzt kommt das Problem! Der Inhalt meiner Message kommt nicht beim Parser an, so dass er immer wieder in case 0: zurückfällt und mir somit den Rest des Programms zerschießt. Ich habe schon verschiedene Positionen von "synchronized(parserHandler)" und "notify()" probiert, aber nix hat geholfen. Kann mir von euch jemand erklären, warum meine Message keinen Inhalt hat? Danke schonmal im voraus.

Grüße,
fugu2.0
 
Falls Du die Ursache gefunden hast, berichte bitte.
 
lang lang ists her und lang hab ich nichts dran gemacht, aber heute ist mir dann doch noch eine Idee gekommen. Habe dieses Problem glaube ich gelöst (gibt aber noch ne Reihe weiterer). Lag alles an der MessageQueu und einem OnScrollListener der in einem Fall auch eine Message sendet. Dieser Fall wurde leider etwas zu häufig aufgerufen, weswegen die falschen Messages noch in der Queu waren. -.-
 
  • Danke
Reaktionen: klausa2

Ähnliche Themen

H
  • HerrFatalVonError
Antworten
4
Aufrufe
787
jogimuc
J
S
Antworten
15
Aufrufe
1.506
shareking
S
S
Antworten
0
Aufrufe
1.245
Sasusi
S
Zurück
Oben Unten