0

Gson().fromJSON 関数で問題が発生することがあります...私のアプリは Gson() を使用して JSON 文字列を逆シリアル化し、ほぼ常に完全に機能しますが、何度かこのエラーが発生します。

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 文字列の破損が原因である可能性がありますか?

前もって感謝します!

4

1 に答える 1

1

接続が途切れたことが原因だと思います。同じjson文字列に対して例外が表示される場合、これは完全に確実です。そうしないと、本当に不正な形式の json ファイルが時々生成される可能性がほとんどありません。

問題が接続の切断にある場合は、この例外が解消されるまで再試行することを検討してください。ファイルが大きい場合は、再開可能なダウンロード スレッドが役立つ場合があります。ただし、ファイル サイズが小さい場合は、それほど複雑にすることはお勧めしません。

PS: GSON でこのような一貫性のない動作をしたことはありません。ライブラリ自体の問題ではないと思います。

于 2012-04-10T09:13:53.123 に答える