kil*_*bit 5 android kotlin moshi
var wall= ArrayList<VKWall>()
try {
val response = r.getString("response") as String
val moshi = Moshi.Builder().build()
val type: Type = Types.newParameterizedType(
ArrayList::class.java,
VKWall::class.java
)
val jsonAdapter: JsonAdapter<ArrayList<VKWall>> = moshi.adapter(type)
wall = jsonAdapter.fromJson(response)!!
} catch (e: JSONException){}
return wall
Run Code Online (Sandbox Code Playgroud)
它无法创建适配器。调试器无法执行此字符串并通过此代码进入函数异常
val jsonAdapter: JsonAdapter<ArrayList<VKWall>> = moshi.adapter(type)
Run Code Online (Sandbox Code Playgroud)
我正在尝试做类似的事情 https://github.com/square/moshi
Platform java.util.ArrayList<com.e.app.fragments.vk_tabs.WallFragment.DataPackage.VKWall> (with no annotations) requires explicit JsonAdapter to be registered
@Parcelize
@JsonClass(
generateAdapter = true)
data class VKWall (
// val UserName:String="",
// val UserSurname:String="",
@Json(name = "text")
val Text:String="" ,
// val attachments: Attachments?,
// val copyright: String="",
// val repost: Repost?
):Parcelable
{
}
Run Code Online (Sandbox Code Playgroud)
小智 3
问题在于 moshi 没有适用于您的 VKWall 类的适配器。要解决此问题,您可以KotlinJsonAdapterFactory根据反射添加:
val moshi = Moshi.Builder()\n // ... add your own JsonAdapters and factories ...\n .add(KotlinJsonAdapterFactory())\n .build()\nRun Code Online (Sandbox Code Playgroud)\n\n或者您可以使用生成的适配器,如下所示:
\n\n// Annotate yours class @JsonClass(generateAdapter = true)\n@JsonClass(generateAdapter = true)\nclass VKWall(\n ....\n)\nRun Code Online (Sandbox Code Playgroud)\n\n有关此的更多文档https://github.com/square/moshi#kotlin
\n\n有关您问题的更多信息https://www.zacsweers.dev/a-closer-look-at-moshi-1-9/
\n\n\n\n现在,对于 Kotlin 类,您要么需要使用代码生成、\n KotlinJsonAdapterFactory,要么提供您自己的自定义 JsonAdapter。\n 这是一个潜在危险的更改!在使用 code gen 的项目中,如果您忘记使用 @JsonClass 注释 Kotlin 类,那么在某些情况下,Kotlin 类可能(似乎)只是在 Work\xe2\x84\xa2\xef\xb8\x8f 之前工作。这些现在将在运行时失败。如果您担心这一点,我建议仅在调试版本中使用 Moshi 1.9 一段时间,以便在发布生产版本之前梳理这些问题。
\n
| 归档时间: |
|
| 查看次数: |
8818 次 |
| 最近记录: |