1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

MessageHandler verliert Message-Inhalt

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von fugu2.0, 19.04.2010.

  1. fugu2.0, 19.04.2010 #1
    fugu2.0

    fugu2.0 Threadstarter Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    3
    Registriert seit:
    12.03.2010
    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
     
  2. klausa2, 20.04.2010 #2
    klausa2

    klausa2 Fortgeschrittenes Mitglied

    Beiträge:
    298
    Erhaltene Danke:
    20
    Registriert seit:
    08.07.2009
    Falls Du die Ursache gefunden hast, berichte bitte.
     
  3. fugu2.0, 14.05.2010 #3
    fugu2.0

    fugu2.0 Threadstarter Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    3
    Registriert seit:
    12.03.2010
    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. -.-
     
    klausa2 bedankt sich.

Diese Seite empfehlen