現在、androidでアプリの開発をしております。
今はテストとしてアプリ起動時にサーバにリクエストを飛ばし、レスポンスとしてJSONオブジェクトを取得するようになっています。
そのレスポンスにあるJSONオブジェクトをターミナルに表示しようとする段階でタイトルのエラーになります。
エラーのスタックトレースは以下になります
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 7915 path $.images[0] at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25) at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:117) at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211) at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106) at okhttp3.RealCall$AsyncCall.execute(RealCall.java:126) at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 7915 path $.images[0] at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
JSONの設計は以下になります
javascript
1{ 2 service:[], 3 name: [], 4 url: [], 5 images: [ 6 [ 7 { 8 ImageUrl:"" 9 }, 10 { 11 ImageUrl:"" 12 }, //可変長で複数取得 13 ], 14 [ 15 { 16 ImageUrl:"" 17 } 18 { 19 IMageUrl:"" 20 }, //同上 21 ], //配列も複数取得される。数は不定 22 ], 23 price: [] 24}
受け取ったJSONを処理するJavaのクラスは以下です。
Java
1 2@Generated("org.jsonschema2pojo") 3public class RandomUserDemo { 4 5 @SerializedName("service") 6 @Expose 7 public List<String> service = new ArrayList<String>(); 8 @SerializedName("name") 9 @Expose 10 public List<String> name = new ArrayList<String>(); 11 @SerializedName("url") 12 @Expose 13 public List<String> url = new ArrayList<String>(); 14 @SerializedName("images") 15 @Expose 16 public List<List<Image>> images = new ArrayList<List<Image>>(); 17 @SerializedName("price") 18 @Expose 19 public List<String> price = new ArrayList<String>(); 20 21} 22@Generated("org.jsonschema2pojo") 23class Image { 24 25 @SerializedName("imageUrl") 26 @Expose 27 public String imageUrl; 28 29}
あとは起動時にターミナルにそれぞれのデータを表示する処理を書いています。
また、今のままでも時々はエラーせずにデータが表示されるのですが、大抵の場合はエラーになります。
取得するデータは毎回同じです。
原因、または解決方法がわかりましたらよろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/13 07:13