2017年11月19日日曜日

moshi で独自の Adapter は KotlinJsonAdapterFactory より先に add すべし

Retrofit と一緒にmoshi を使っています。
moshi には Kotlin Support 機能があり、別途 moshi-kotlin を追加して、 implementation 'com.squareup.moshi:moshi-kotlin:1.5.0' KotlinJsonAdapterFactory を MoshiBuilder に add します。 val moshi = Moshi.Builder() .add(KotlinJsonAdapterFactory()) .build()

また、moshi には Custom Type Adapters 機能があり、JSON の値とオブジェクトとの変換をカスタマイズすることができます。

この CustomAdapter および、CustomAdapter の Factory は KotlinJsonAdapterFactory より先に add しなければいけません (Kotlin Support のところに書いてあるのに気づかずはまってしまった...)。 Retrofit.Builder() .addConverterFactory(MoshiConverterFactory.create( Moshi.Builder() .add(MyCustomAdapter()) // KotlinJsonAdapterFactory より先なので OK .add(KotlinJsonAdapterFactory()) .build())) ... Adapter を生成するときに、追加された順番で Factory に Adapter が生成できるか問い合わせていくため、KotlinJsonAdapterFactory を先にすると CustomAdapter に来ないので気をつけましょう。


0 件のコメント:

コメントを投稿