Ich habe ein seltsames Verhalten beim Parsen eines JSON mit Gson. Ich benutze diesen Code:JsonSyntaxException wegen IllegalState von gson
private static Container parseContainer(String containerJson) {
try {
//TODO Remove try catch when Bug is done
return containerJson != null ? new Gson().fromJson(containerJson, Container.class)
: null;
} catch (JsonSyntaxException e) {
LOGGER.error("JsonSyntaxException ", e);
LOGGER.error("Json: " + containerJson);
//Sleep 3 minutes and try again.
try {
Thread.sleep(1000L * 60 * 3);
} catch (InterruptedException e1) {
LOGGER.error("Exception", e);
}
LOGGER.error("Try again to parse json: " + containerJson);
Container result = new Gson().fromJson(containerJson, Container.class);
LOGGER.error("Parsing successful on second try.");
return result;
}
}
Wenn das Verfahren in meinem Projekt aufgerufen wird, funktioniert es in der Regel ohne die Ausnahme zu werfen. Aber manchmal wird die Ausnahme ausgelöst und nach einiger Wartezeit funktioniert das Parsen gut.
Ich habe nicht herausgefunden, wann die Ausnahme ausgelöst wird und wann nicht.
Wie kann das Protokoll "Parsing erfolgreich beim zweiten Versuch" jemals protokolliert werden?
Die Ausnahme ist
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapt erFactory.java:176)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
Scheint, wie die Ausnahme auf indem dem fromJson Anruf ausgelöst wird, wird direkt vor dem „Parsen erfolgreich auf dem zweiten Versuch“ Protokolldruck. Können Sie hier einen fehlerhaften JSON anzeigen? –
Loggen Sie den JSON in das Logcat ein, bevor Sie versuchen, ihn zu analysieren und genaue Daten aufzuspüren, die Sie vor der Ausnahme zu analysieren versuchen - auf diese Weise können Sie überprüfen, ob die Daten korrekt sind. Wahrscheinlich gibt es einen Fehler im Backend, das Sie verwenden. –
hast du deinen json verifiziert? können Sie versuchen, diese [link] (http://jsonformat.com/) zu verwenden, um Ihre JSON zu verifizieren –