0

私が直面している問題は少し奇妙です。レトロフィット 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()
4

0 に答える 0