私が直面している問題は少し奇妙です。レトロフィット 2 の responsebody モデルとして使用する通常のモデル クラスがある場合、予期しないエラーが発生するとします。
open class Example : RealmObject(){
@Json(name = "token")
var token: String? = null
@Json(name = "data")
var data: RealmList<Data>? = null
}
そしてデータクラスは
open class Data : RealmObject(){
@Json(name = "info")
var info: String? = null
}
ClassNotFoundException を表示してコードがクラッシュし (デバッグ モードで実行しています)、KotlinJsonAdapterFactory() を削除してもクラッシュは発生しませんが、データ値が存在しなくなります。つまり、デバッグ モードでは、存在しないかのように表示されます。 Example のオブジェクトはトークン値のみを表示し、データはnullでも存在しませんが、注釈を使用するため、上記は単なる実験であるため、KotlinJsonAdapterFactory() が必要です。
私が見つけた唯一の解決策は、両方のクラスをデータクラスに変換することであり、完全に機能します(もちろん、RealmObject拡張を削除してRealmListを通常のリストにする必要があります)が、RealmObject()クラスを拡張する必要があり、データクラスを開くことができませんモデルの Realm db に必要です。
そこで、KotlinJsonAdapterFactory() を削除して 1.4 に戻しました。proguard のように見えた後でもすべてが機能するので、Moshi 1.5 にアップグレードするにはどうすればよいですか。
また、サンプル コードで何かを更新しました。データ オブジェクトは RealmList です。おそらく、応答が来たときにそれが無視された/存在しなかったのは、Moshi の RealmListAdapter が無視されたためだったのでしょうか???
moshi と retrofit インスタンスのスニペットを添付します
Moshi`インスタンス
Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.add(RealmListAdapter.FACTORY)
.build()
レトロフィット インスタンス
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(MoshiConverterFactory.create(moshi))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build()