2014-12-10 4 views
5

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) 
+0

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? –

+0

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. –

+0

hast du deinen json verifiziert? können Sie versuchen, diese [link] (http://jsonformat.com/) zu verwenden, um Ihre JSON zu verifizieren –

Antwort

0

Ihre Ausnahme nicht voll ist. IllegalStateException muss hier einen Kommentar haben. Etwas wie das.

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 

Es wäre hilfreich, wenn Sie es in einem solchen Format So sehen können, trotzdem den Fehler, dass Ihr Container.class() nicht richtig Typ für Ihre containerJson ist, versuchen Sie es wie diese mit Code zu beheben

Type collectionType = new TypeToken<Collection<Container>>(){}.getType(); 
Collection<Container> enums = gson.fromJson(containerJson, collectionType); 
Verwandte Themen