Jetpack 撰写预览因 hiltViewModel<>() 崩溃

2024-03-28

我使用 compose 版本 1.1.0-beta03 和 hilt-navigation-compose:1.0.0-beta01。 这是我的可组合代码:

fun EngagementBotChart(modifier: Modifier = Modifier) {
    val newHomeViewModel = hiltViewModel<HomeViewModel>()
    AndroidView(
        modifier = modifier.fillMaxSize(),
        factory = { context ->
            
        },
        update = { view ->
            
        }
    )
}

当我构建项目时它工作正常,但这是在撰写预览中发生的情况:

java.lang.NoSuchMethodException: ir.inbo.app.home.viewmodel.HomeViewModel.<init>()
    at java.base/java.lang.Class.getConstructor0(Class.java:3349)
    at java.base/java.lang.Class.newInstance(Class.java:556)
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
    at androidx.lifecycle.viewmodel.compose.ViewModelKt.get(ViewModel.kt:87)
    at androidx.lifecycle.viewmodel.compose.ViewModelKt.viewModel(ViewModel.kt:72)
    at ir.inbo.app.home.ui.HomeComponentsKt.EngagementBotChart(HomeComponents.kt:281)
    at ir.inbo.app.home.ui.ComposableSingletons$HomeComponentsKt$lambda-1$1$1$4$invoke$$inlined$ConstraintLayout$2.invoke(ConstraintLayout.kt:2424)
    at ir.inbo.app.home.ui.ComposableSingletons$HomeComponentsKt$lambda-1$1$1$4$invoke$$inlined$ConstraintLayout$2.invoke(ConstraintLayout.kt:101)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.ui.layout.LayoutKt.MultiMeasureLayout(Layout.kt:562)
    at ir.inbo.app.home.ui.ComposableSingletons$HomeComponentsKt$lambda-1$1$1$4.invoke(HomeComponents.kt:255)
    at ir.inbo.app.home.ui.ComposableSingletons$HomeComponentsKt$lambda-1$1$1$4.invoke(HomeComponents.kt:86)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at ir.inbo.app.home.ui.HomeComponentsKt.HomeBoxComponent(HomeComponents.kt:267)
    at ir.inbo.app.home.ui.ComposableSingletons$HomeComponentsKt$lambda-1$1$invoke$$inlined$ConstraintLayout$2.invoke(ConstraintLayout.kt:2413)
    at ir.inbo.app.home.ui.ComposableSingletons$HomeComponentsKt$lambda-1$1$invoke$$inlined$ConstraintLayout$2.invoke(ConstraintLayout.kt:101)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.ui.layout.LayoutKt.MultiMeasureLayout(Layout.kt:562)
    at ir.inbo.app.home.ui.ComposableSingletons$HomeComponentsKt$lambda-1$1.invoke(HomeComponents.kt:255)
    at ir.inbo.app.home.ui.ComposableSingletons$HomeComponentsKt$lambda-1$1.invoke(HomeComponents.kt:34)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.material.MaterialTheme_androidKt.PlatformMaterialTheme(MaterialTheme.android.kt:23)
    at androidx.compose.material.MaterialThemeKt$MaterialTheme$1$1.invoke(MaterialTheme.kt:82)
    at androidx.compose.material.MaterialThemeKt$MaterialTheme$1$1.invoke(MaterialTheme.kt:81)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    at androidx.compose.material.TextKt.ProvideTextStyle(Text.kt:265)
    at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:81)
    at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:80)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    at androidx.compose.material.MaterialThemeKt.MaterialTheme(MaterialTheme.kt:72)
    at ir.inbo.app.theme.ThemeKt.InboTheme(Theme.kt:54)
    at ir.inbo.app.home.ui.HomeComponentsKt.HomeGrid(HomeComponents.kt:34)
    at ir.inbo.app.home.ui.HomeComponentsKt.HomeGridPreview(HomeComponents.kt:232)
    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.CommonPreviewUtils.invokeComposableMethod(CommonPreviewUtils.kt:150)
    at androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableViaReflection$ui_tooling_release(CommonPreviewUtils.kt:189)
    at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1$composable$1.invoke(ComposeViewAdapter.kt:578)
    at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1$composable$1.invoke(ComposeViewAdapter.kt:576)
    at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1.invoke(ComposeViewAdapter.kt:615)
    at androidx.compose.ui.tooling.ComposeViewAdapter$init$3$1.invoke(ComposeViewAdapter.kt:571)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    at androidx.compose.ui.tooling.InspectableKt.Inspectable(Inspectable.kt:61)
    at androidx.compose.ui.tooling.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:520)
    at androidx.compose.ui.tooling.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:519)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    at androidx.compose.ui.tooling.ComposeViewAdapter.WrapPreview(ComposeViewAdapter.kt:515)
    at androidx.compose.ui.tooling.ComposeViewAdapter.access$WrapPreview(ComposeViewAdapter.kt:121)
    at androidx.compose.ui.tooling.ComposeViewAdapter$init$3.invoke(ComposeViewAdapter.kt:571)
    at androidx.compose.ui.tooling.ComposeViewAdapter$init$3.invoke(ComposeViewAdapter.kt:568)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.ui.platform.ComposeView.Content(ComposeView.android.kt:410)
    at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:252)
    at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:251)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:166)
    at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:123)
    at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:122)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(AndroidCompositionLocals.android.kt:114)
    at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:157)
    at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$3.invoke(Wrapper.android.kt:156)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:156)
    at androidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.android.kt:140)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:3337)
    at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2582)
    at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2571)
    at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:234)
    at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source)
    at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2571)
    at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2522)
    at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:478)
    at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:748)
    at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:433)
    at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:140)
    at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:131)
    at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:897)
    at androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:131)
    at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:182)
    at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
    at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.java:196)
    at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:138)
    at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:131)
    at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:984)
    at android.view.View.dispatchAttachedToWindow(View.java:20479)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3489)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3496)
    at android.view.AttachInfo_Accessor.setAttachInfo(AttachInfo_Accessor.java:44)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:360)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:431)
    at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:141)
    at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:714)
    at com.android.tools.idea.rendering.RenderTask.lambda$inflate$7(RenderTask.java:870)
    at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$2.run(RenderExecutor.kt:187)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

当我删除 hiltviewModel 代码时,一切正常! 我尝试了不同版本的compose,但无法解决这个问题!


经过一番搜索和审查后谷歌样本 https://github.com/android/nowinandroid/blob/main/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt这里的代码是您必须遵循的方法,以防止预览崩溃:

为您的屏幕和初始视图模型提供一个根可组合项,从 viewModel 收集数据作为状态(如果您的数据是流动的),然后将数据传递给内容可组合项

@Composable
fun HomeScreen(
    navController: NavController
){
    val viewModel = hiltViewModel<HomeViewModel>()
    val someData by viewModel.someData.collectAsState()
}
@Composable
fun HomeScreenContent(
    someData: Type = defaultvalue
){
   //your UI codes
}

在预览使用中,用HomeScreenContent代替HomeScreen,你的问题就解决了!

感谢@PhilipDukhov 在评论中提供的帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack 撰写预览因 hiltViewModel<>() 崩溃 的相关文章

随机推荐

  • 如何获取内存中对象的数据集?

    有谁知道与泛型和 RTTI 一起使用的 TDataset 后代 以便我可以编写这样的代码 并在 GUI 中使用数据感知组件 ds TDataset
  • 如何使用 Clap Args 的内部库 Enum

    我目前正在研究一个铁锈端口 https github com JuxhinDB twistrs某证券的tool https github com elceef dnstwist 与 Rust 的指南一致 我想将核心库隔离到自己的包中 以便我
  • 如何以编程方式删除 Groovy 中的默认导入?

    默认情况下 一些包是在 Groovy 类中导入的 我知道您可以使用 ImportCustomizer 添加新的 但有没有一种方法可以以编程方式删除它们 预先感谢您的回答 不 如果你查看代码 你会发现标准进口 http groovy code
  • 使用java库访问谷歌云存储遇到“403禁止”

    我正在尝试在 scala 中使用谷歌云存储 java 库来列出存储桶中的项目 val credential new GoogleCredential Builder setTransport GoogleNetHttpTransport n
  • Set-AzStorageBlobContent 引发异常:路径中存在非法字符

    我正在将 Azure 部署脚本从 AzureRM 迁移到 Az 新模块似乎无法打开文件 有任何想法吗 我尝试用正斜杠替换反斜杠 我什至从脚本所在的文件夹中调用它 所以我不需要向它传递完整的文件名 它会正确地将其解析为全名 但它仍然无法打开它
  • julia变量的范围:在开放表达式的循环内重新分配

    我正在努力在 Julia 的循环中重新分配变量 我有一个以下的例子 infile test txt feature for ln in 1 3 println feature feature end open infile do f if
  • Java解析相对路径

    您将如何解决相对路径 我正在寻找的是一个类似于php的realpath的功能 该函数只需要删除所有 以便输入字符串可以安全地与其他字符串一起使用 一般的方式是使用File类获取规范路径 https docs oracle com javas
  • 如何将字符串转换为小数点后三位的小数?

    string num 23 6 我想知道如何将其转换为小数点后三位 喜欢 decimal nn 23 600 有什么方法吗 我尽力了 首先你的string num 23 6 won t even编译 您需要在字符串中使用双引号 例如stri
  • 混合模式内容 - 如何从 h1 中选择文本但不包含其子元素的文本?

    我在打印简单文本时遇到问题 h1 元素 require nokogiri doc Nokogiri HTML h1 em Name em A Johnson h1 puts doc at xpath h1 content 它输出 NameA
  • 什么是 dict_keys、dict_items 和 dict_values?

    我在使用的时候遇到过这三种类型collections Counter的 viewkeys viewitems 和 viewvalues 方法 这三个方法返回的值都是类型dict keys dict items and dict values
  • 如何将TextView旋转90度并显示[重复]

    这个问题在这里已经有答案了 我在图表页面遇到一种情况LinearLayout应该显示TextView旋转 90 度 尝试这个
  • 在java中使用接口的实现类型

    我想创建一个接口 强制实现它的每个类对于实现的类的类型具有特定的功能 假设我有类 MyClassA MyClassB MyClassC 等 它们都需要自己类型的函数 在我的A班 public class MyClassA implement
  • TFS 2012 中的 SVN 标记等效项

    我最近迁移到TFS 2012我曾与SVN许久 在 SVN 中我使用了 Tags 标记一些重要的 检查站 开发 即当我完成一个软件版本 alpha beta 时 我创建了一个Tag对于那个版本 如果发生任何错误 我会 受保护的 现在 我需要在
  • knitr 如何将警告信息保留在盒子内?

    我正在使用 knit 编写教程 我想展示学生可能遇到的一些警告和错误 虽然我能够使用以下命令很好地显示框中的代码块tidy TRUE选项 我不明白如何处理警告和错误的显示 例如 如果我有以下代码 documentclass article
  • 如何将某个 S3 文件标记为公开

    如何通过 Web 服务 API 将某个 S3 文件标记为公开 使用方法setCannedAcl CannedAccessControlList PublicRead 更改访问控制权限 阅读 java 文档以获取详细信息here http d
  • 如何在R中拆分列?

    我也想以同样的方式拆分同一列 我想按如下方式执行此操作 但它无法正常工作 我使用的代码是t38kbat read table test38kbat txt header FALSE head t38kbat t38kbat lt separ
  • 如何在IE9中启用使用ajax加载本地文件

    我知道存在起源问题 但设置网络服务器不是这里的一个选项 Firefox v14 加载本地文件没有问题 添加 allow file access from files 后Chrome没有问题 有什么办法也修复IE9吗 谢谢 编辑 我找到了解决
  • Android SuperUser 应用程序如何检测应用程序请求 root?

    我正在编写一个将使用的应用程序su执行linux内核中的一些命令 我想知道超级用户如何确定应用程序正在请求 root 权限 另外 是否有任何已知的方法 通过混淆 可以绕过此检查 换句话说 尽管 Android 清单文件中没有明确请求权限 A
  • Mysqli 查询返回空结果

    我试图使用以下代码从我的数据库获取一些数据
  • Jetpack 撰写预览因 hiltViewModel<>() 崩溃

    我使用 compose 版本 1 1 0 beta03 和 hilt navigation compose 1 0 0 beta01 这是我的可组合代码 fun EngagementBotChart modifier Modifier Mo