問題タブ [moshi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Moshi 1.5 で Kotlin を使用して KotlinJsonAdapterFactory() を使用すると Class Not Found Exception が発生する
私が直面している問題は少し奇妙です。レトロフィット 2 の responsebody モデルとして使用する通常のモデル クラスがある場合、予期しないエラーが発生するとします。
そしてデータクラスは
ClassNotFoundException を表示してコードがクラッシュし (デバッグ モードで実行しています)、KotlinJsonAdapterFactory() を削除してもクラッシュは発生しませんが、データ値が存在しなくなります。つまり、デバッグ モードでは、存在しないかのように表示されます。 Example のオブジェクトはトークン値のみを表示し、データはnullでも存在しませんが、注釈を使用するため、上記は単なる実験であるため、KotlinJsonAdapterFactory() が必要です。
私が見つけた唯一の解決策は、両方のクラスをデータクラスに変換することであり、完全に機能します(もちろん、RealmObject拡張を削除してRealmListを通常のリストにする必要があります)が、RealmObject()クラスを拡張する必要があり、データクラスを開くことができませんモデルの Realm db に必要です。
そこで、KotlinJsonAdapterFactory() を削除して 1.4 に戻しました。proguard のように見えた後でもすべてが機能するので、Moshi 1.5 にアップグレードするにはどうすればよいですか。
また、サンプル コードで何かを更新しました。データ オブジェクトは RealmList です。おそらく、応答が来たときにそれが無視された/存在しなかったのは、Moshi の RealmListAdapter が無視されたためだったのでしょうか???
moshi と retrofit インスタンスのスニペットを添付します
Moshi`インスタンス
レトロフィット インスタンス
json - Gson または Moshi: POJO のフィールドには 2 つのタイプがあり、いずれかのフィールドに保存する方法
編集:
これが私が持っているjson文字列です:
または、サーバーからの任意の json 文字列を使用できます。ここでのポイントは、動的な値を持つ可能性のある 1 つ以上のフィールドが存在する可能性があることです (この場合、field3 は文字列または整数にすることができます)。
次に、それらを任意の POJO にデシリアライズしたい
サーバーから送信された値が の場合、値Int
を に設定したいということですfield3Int
。の場合は、String
に設定しfield3String
ます。
動的な値を持つ可能性があるこの種のフィールドを持つ他の POJO が存在する可能性があります。
Serj の回答に感謝しますが、実際の状況を示すために質問を編集した後も、TypeAdapter クラスで機能させることはできません。
ところで。これを Retrofit2 で次のように使用します。