2012-04-10 5 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 

このエラーは、接続がちょうど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ブロックに入る前の値を意味するならば、そのようなものはありません。私はしばらくの間、tryを配置し、それに応じてキャッチケース内の必要な変数をすべて初期化することをお勧めします。 –

+0

リセットすることで、私はtryブロックの中にあるものをやり直すことを意味します。つまり、 'catch 'がエラーをキャッチすると' try'ブロックの中に何があるのか​​強制します。このようにして、 'catch'がエラーをキャッチすると、データが正しければ何度も何度もデータを取得します。だから、これを行う方法はありますか? –