2012-04-10 8 views
0

가끔는 ... 내 애플은 GSON를 (사용하여 JSON 문자열을 역 직렬화 GSON() fromJSON 기능에 문제가 )와 완벽하게 거의 모든 시간을 작동하지만, 여러 번 나는이 오류가 발생합니다 :임의 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 

연결이 실패하고 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이 도움이 될 수 있습니다. 그러나 파일 크기가 작 으면 나는 당신이 그만큼 복잡하게 진행하지 말라고 권하지 않습니다.

추신 : 저는 GSON과 같은 일관성없는 행동을 한 적이 없었습니다. 그래서 그것이 당신이 생각하는 것이라면 라이브러리 자체에서 문제가되지 않는다고 생각합니다.

+0

고맙습니다. 나는 또한 그렇게 생각합니다. 'catch' 내부를 호출하여'try' 내부에있는 것을 리셋하는 함수가 있습니까? –

+0

@KrLx_roller 다시 설정 하시겠습니까? try 블록에 들어가기 전에 값을 의미한다면, 그런 값은 없습니다. try를 잠깐 배치하고 catch case에 필요한 모든 변수를 적절하게 초기화 할 것을 권한다. –

+0

다시 설정하기 나는'try' 블록 안에있는 것을 다시하는 것을 의미합니다.'catch '가 오류를 발견하면'try' 블록 안에있는 것을 수행해야합니다. 이런 식으로'catch '가 에러를 잡으면, 데이터가 정확해질 때까지 데이터를 몇 번이고 다시 얻을 것이다. 그래서, 이것을 할 방법이 있습니까? –