2012-04-10 2 views
0

Я иногда имеют проблемы с функцией Gson() fromJSON ... Мое приложение десериализации строку JSON с помощью Gson() и он работает почти все время отлично, но несколько раз я получаю эту ошибку:.Случайные MalformedJsonException

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected literal value at line 1 column 7592 
at com.google.gson.Gson.fromJson(Gson.java:769) 
at com.google.gson.Gson.fromJson(Gson.java:721) 
at com.google.gson.Gson.fromJson(Gson.java:670) 
at com.google.gson.Gson.fromJson(Gson.java:642) 
at my.new.prog.Main$GetData.onPostExecute(Main.java:301) 
at my.new.prog.Main$GetData.onPostExecute(Main.java:1) 
at android.os.AsyncTask.finish(AsyncTask.java:417) 
at android.os.AsyncTask.access$300(AsyncTask.java:127) 
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3691) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: com.google.gson.stream.MalformedJsonException: Expected literal value at line 1 column 7592 
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1298) 
at com.google.gson.stream.JsonReader.readLiteral(JsonReader.java:1195) 
at com.google.gson.stream.JsonReader.nextValue(JsonReader.java:789) 
at com.google.gson.stream.JsonReader.objectValue(JsonReader.java:766) 
at com.google.gson.stream.JsonReader.peek(JsonReader.java:380) 
at com.google.gson.stream.JsonReader.advance(JsonReader.java:426) 
at com.google.gson.stream.JsonReader.skipValue(JsonReader.java:637) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:174) 
at com.google.gson.Gson.fromJson(Gson.java:755) 
... 16 more 

Я думаю, что эта ошибка появляется, когда соединение терпит неудачу только с битом lil и извлекает поврежденную строку JSON. Повторяю, эта ошибка появляется случайным образом и в разных частях строки JSON.

В этом случае я получаю ошибку здесь: Expected literal value at line 1 column 7592
Но иногда я получаю ошибку здесь: Expected literal value at line 1 column 140

Что вы думаете? Может быть, проблема, которую я испытываю, вызвана поврежденной строкой JSON?

Спасибо заранее!

+1

Пожалуйста, разместите код вашего класса 'GetData', или мы можем только догадываться, что может быть неправильным :) –

ответ

1

Я думаю, что проблема вызвана прерыванием соединения. Это абсолютно очевидно, если исключение отображается для одной и той же строки json. В противном случае существует небольшая возможность, что время от времени вы генерируете действительно искаженные json-файлы.

Если проблема связана с нарушением соединения, попробуйте повторить попытку, пока вы не избавитесь от этого исключения. Если файл большой, вы можете найти resumable download thread. Однако, если размер файла небольшой, я бы не советовал вам идти так сложно, как это.

PS: У меня никогда не было такого непоследовательного поведения от GSON, поэтому я думаю, что это не проблема в самой библиотеке, если это то, что вы думаете.

+0

Спасибо, я так думаю. Есть ли какая-либо функция для вызова внутри 'catch' для сброса того, что находится внутри' try'? –

+0

@KrLx_roller Что значит сброс? Если вы имеете в виду значения перед тем, как идти в блок try, их нет. Я бы посоветовал вам поместить попытку через некоторое время и убедиться, что вы соответственно инициализируете все необходимые переменные в случае catch. –

+0

Сбрасывая, я имею в виду снова сделать то, что находится внутри блока 'try', я имею в виду, если' catch' ловит ошибку, заставляйте делать то, что находится внутри блока 'try'. Таким образом, если 'catch' поймает ошибку, он будет получать данные снова и снова, пока данные не будут корректными. Итак, есть ли способ сделать это? –

Смежные вопросы