Ho uno strano comportamento durante l'analisi di un json con gson. Io uso questo codice:JsonSyntaxException a causa di IllegalState di 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;
}
}
Quando il metodo viene richiamato nel mio progetto, di solito funziona senza generare un'eccezione. Ma a volte viene lanciata l'eccezione e dopo aver atteso qualche tempo, l'analisi funziona correttamente.
Non ho capito quando viene lanciata l'eccezione e quando no.
Come può essere registrato il log "Analisi riuscita al secondo tentativo"?
L'eccezione è
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)
Sembra che l'eccezione sia stata lanciata sulla chiamata daJson appena prima della stampa del registro di "Esegui con successo il secondo tentativo". Puoi mostrare qui un JSON in errore? –
Registrare il JSON nel logcat prima di provare ad analizzarlo e rintracciare i dati esatti che si stanno tentando di analizzare prima dell'eccezione, in questo modo è possibile eseguire il debug se i dati sono corretti. Probabilmente c'è un bug nel back-end che stai usando. –
hai verificato il tuo json? puoi provare a usare questo [collegamento] (http://jsonformat.com/) per verificare il tuo json –