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
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:
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
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();
}
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);
}
Grüße,
fugu2.0