首页 > 解决方案 > 在 Jetpack Compose @Preview 中使用 moshi 时出现渲染问题

问题描述

我正在尝试使用Jetpack Compose 的 @Preview 块中的Moshi将假 JSON 字符串解析为 Object,下面是我的代码:

@Preview("Post Card")
@Composable
fun PostCardPreview() {

    val moshi = Moshi.Builder().build()
    val type: Type =
        Types.newParameterizedType(List::class.java, Post::class.java)
    val jsonAdapter = moshi.adapter<List<Post>>(type)
    val posts = jsonAdapter.fromJson(fakePostDatas) ?: listOf()

    TestAppTheme {
        Surface {
            PostCard(post = posts[0])
        }
    }
}

我遇到了以下问题:

java.lang.NoSuchMethodError: 'com.squareup.moshi.JsonAdapter com.squareup.moshi.Moshi.adapter(java.lang.reflect.Type, java.util.Set, java.lang.String)'
    at me.yaoandy107.dribbbleone.model.PostJsonAdapter.<init>(PostJsonAdapter.kt:29)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at com.squareup.moshi.StandardJsonAdapters.generatedAdapter(StandardJsonAdapters.java:246)
    at com.squareup.moshi.StandardJsonAdapters$1.create(StandardJsonAdapters.java:62)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:130)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:64)
    at com.squareup.moshi.CollectionJsonAdapter.newArrayListAdapter(CollectionJsonAdapter.java:52)
    at com.squareup.moshi.CollectionJsonAdapter$1.create(CollectionJsonAdapter.java:36)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:130)
    at com.squareup.moshi.Moshi.adapter(Moshi.java:64)
    at me.yaoandy107.dribbbleone.ui.home.PostCardKt.PostCardPreview(PostCard.kt:85)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at androidx.compose.ui.tooling.preview.PreviewUtilsKt.invokeComposableMethod(PreviewUtils.kt:141)
    at 
    ......

我是 Jetpack Compose 的新手,我是否以错误的方式使用它?还是只是不能在@Preview 中使用 codegen 类?

标签: androidandroid-jetpack-composemoshi

解决方案


推荐阅读