2017-05-08 14 views
1

Android用のMoshiライブラリを使用してJavaオブジェクトをJSONに変換しようとしています。オブジェクトは、タイプArrayList <float[]>をMoshi JSONライブラリ(Android用)を使用してシリアル化する方法

のArrayListのプロパティを含む<フロート[]>

と私はオブジェクトを変換するには、次のアダプタを登録しています。

Type type = Types.newParameterizedType 
     (List.class, HistoryPath.class, ArrayList.class, Float[].class, Float.class); 

JsonAdapter<Drawing> adapter = moshi.adapter(type); 

String json = adapter.toJson(drawing); 

"toJson" 方法は、次の例外で失敗:

java.lang.IllegalArgumentExceptionが:プラットフォーム java.util.ArrayListの[]は に登録することが明示的 JsonAdapterを必要と注釈付きcom.square.moshi.ClassJsonAdapter $ 1.create(ClassJsonAdapter.java:50) com.square.moshi.Moshi.adapter(Moshi.java:99) at com.squar eup.moshi.ClassJsonAdapter $ 1.createFieldBindings(ClassJsonAdapter.java:90) ( )com.squareup.moshi.ClassJsonAdapter $ 1.create(ClassJsonAdapter.java:74) at com.square.moshi.Moshi.adapter(Moshi.java :99) でcom.squareup.moshi.ClassJsonAdapter $ 1.createFieldBindings(ClassJsonAdapter.java:90) でcom.squareup.moshi.ClassJsonAdapter $ 1.create(ClassJsonAdapter.java:74) com.squareup.moshiで.Moshi.adapter(Moshi.java:99) at com.square.moshi.Moshi.adapter(Moshi.java:57) at com.squareup.moshi.Collectio nJsonAdapter.newArrayListAdapter(CollectionJsonAdapter.java:51) で com.squareup.moshi.Moshi.adapterでcom.squareup.moshi.CollectionJsonAdapter $ 1.create(CollectionJsonAdapter.java:35) (Moshi.java:99) でcom.squareup.moshi.Moshi.adapter(Moshi.java:57)

私は私のタイプの定義が間違っていると思うが、私は

答えて

3

ArrayListのは、プラットフォームの種類である右の値を見つけることができないよう、エラーが示すように。 Listを使用できます(またはArrayList専用のカスタムJsonAdapterを作成できます)。

また、ここでの問題があります: Type type = Types.newParameterizedType(List.class, HistoryPath.class, ArrayList.class, Float[].class, Float.class);

このタイプが無効であるList<HistoryPath, ArrayList, Float[], Float>であり、それは、JsonAdapter<Drawing> adapter = moshi.adapter(type);のための正しい結果を得られません。

あなたはたぶんJsonAdapter<Drawing> adapter = moshi.adapter(Drawing.class);がほしいと思うかもしれません。

+0

あなたの提案に基づいてさまざまなエラーを取得: は のArrayList 注釈付き[] – AndroidGuy

+1

@androidguyのArrayListを登録する明示的なJsonAdapterを必要とするプラットフォームのタイプです。 JsonAdapterを登録するか、Listを使用する必要があります。 –

関連する問題