Par*_*ane 3 android kotlin moshi
我想使用通用类型的 Moshi 适配器。
\n这是我的通用类型适配器代码,
\nfun <T> getObjectFromJson(typeOfObject: Class<T>, jsonString: String): T? {\n val moshi = Moshi.Builder().build()\n val jsonAdapter: JsonAdapter<T> = moshi.adapter<T>(\n typeOfObject::class.java\n )\n return jsonAdapter.fromJson(jsonString)!!\n}\nRun Code Online (Sandbox Code Playgroud)\n该代码不起作用。它抛出一个错误,
\n\n\n平台类 java.lang.Class 需要显式注册 JsonAdapter
\n
但是,如果我不\xe2\x80\x99t 使用这样的泛型类型,
\nfun getObjectFromJson(jsonString: String): UserProfile? {\n val moshi = Moshi.Builder().build()\n val jsonAdapter: JsonAdapter<UserProfile> = moshi.adapter<UserProfile>(\n UserProfile::class.java\n )\n return jsonAdapter.fromJson(jsonString)!!\n}\nRun Code Online (Sandbox Code Playgroud)\n然后代码就可以正常工作了。
\n这是UserProfile类,
\n @Parcelize\n@JsonClass(generateAdapter = true)\ndata class UserProfile(\n @get:Json(name = "p_contact")\n val pContact: String? = null,\n\n @get:Json(name = "profile_pic")\n var profilePic: String? = null,\n\n @get:Json(name = "lname")\n val lname: String? = null,\n\n @get:Json(name = "token")\n var token: String? = null,\n\n @get:Json(name = "fname")\n val fname: String? = null,\n\n @SerializedName("_id")\n @get:Json(name = "_id")\n var id: String? = null,\n\n @get:Json(name = "email")\n var email: String? = null,\n\n @SerializedName("refresh_token")\n @get:Json(name = "refresh_token")\n var refreshToken: String? = null\n) : Parcelable\n\n \nRun Code Online (Sandbox Code Playgroud)\n
已经是该类typeOfObject的一个实例Class<T>,您::class.java不必要地调用它:它返回Class<Class>,而这不是您想要的。
只是改变
val jsonAdapter: JsonAdapter<T> = moshi.adapter<T>(typeOfObject::class.java)
Run Code Online (Sandbox Code Playgroud)
到
val jsonAdapter: JsonAdapter<T> = moshi.adapter<T>(typeOfObject)
Run Code Online (Sandbox Code Playgroud)
顺便说一句:在每次反序列化时创建一个新的 Moshi 实例并不是最理想的。你应该重复使用它。
| 归档时间: |
|
| 查看次数: |
2449 次 |
| 最近记录: |