2017年11月19日日曜日

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

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


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

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


0 件のコメント:

コメントを投稿