问题标签 [dagger-hilt]
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 - 如何在 Kotlin [Dagger-Hilt] 中创建和使用房间数据库
这是一个自我回答的问题,因为我在我的项目中遇到了代表曝光问题,但在经过几个小时的研究后最终解决了这个问题。我没有保持沉默,而是认为这可能会在未来帮助某人。本教程演示了如何创建 Room 数据库并在活动/片段中使用它。此处给出的示例用例是查询数据库的大小并更新片段中的视图。
注意:下面的代码中有一些 Dagger-Hilt 依赖注入,但如果您手动执行自己的依赖注入,则应该应用相同的方法。我也希望你对 MVVM 架构有一些基本的了解。如果您对涉及 LiveData 的其他方法感兴趣,您可能会在此处找到有用的 Java 相关问题:resource 1 , resource 2 ; 然而,重点是 Kotlin,这个解决方案不需要 LiveData。
android - 使用 Robolectric 和 Dagger Hilt 启动 Fragment 时不注入 Fragment 的属性
使用Robolectric和Dagger Hilt启动片段时,不会在片段中注入后期初始化字段。
我有以下测试:
我的 TestFragment 看起来像这样:
当我尝试运行此测试时,它会显示错误kotlin.UninitializedPropertyAccessException: lateinit property testClass has not been initialized
我使用官方文档launchFragmentInHiltContainer
中的方法,但是当我只使用.lunchFragmentInContainer
androidx.fragment.app.testing
当我使用模拟器而不是 Robolectric 时,字段被正确注入。
我试图添加:
并从控制台运行测试,但测试仍然失败
android - Hilt 依赖注入,在提供的模块内滑动模块
我是新手,我不知道我在做什么是错误的,还是因为其他原因而无法正常工作,所以请多多包涵。
我想将一个依赖于另一个类的类注入到视图持有者类中。
视图持有者扩展了 BaseViewHolder,我要注入的类是一个依赖于 glide 的图像助手类。
我有一个提供滑行的模块
这个模块在我的应用程序的其他地方使用,所以我知道它可以工作。
我已经用@Inject 注释了图像帮助器构造函数,我正在尝试像这样将注入滑翔到这个类中
然后在我的视图持有者中,我用@Inject 注释了图像助手
在我的 findViewIds 方法中,我尝试访问图像助手但它为空,
所以我尝试为它构建一个模块,没有任何乐趣
任何帮助表示赞赏
android - Hilt Fragments 必须附加到 @AndroidEntryPoint Activity。找到:类 androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity
运行单元测试代码时出现以下错误。
这是我的测试代码。
对这个问题有任何想法吗?
android - 通过为 Mockwebserver 提供基本 url 来解决错误
在我的应用程序中,我使用 Hilt 进行依赖注入。我在我的存储库中实现了一个RetrofitModule
为它提供依赖项,如下所示:
为了为被测的 Mockwebserver 配置提供测试基础 url,我在MyApplication
andMyApplicationTest
类中实现了函数
MyApplication.class
MyApplicationTest.class
但是当我构建应用程序时,我收到了这个错误:
我认为问题在于这种方法
并且通过提供 MyApplication 类存在问题
android - 如何使用 Hilt 绑定/提供 Activity 或 Fragment?
我正在尝试在 Android 应用程序上实现 Hilt,虽然与 Dagger 相比,它很容易实现并删除了很多样板代码,但我想念一些东西,比如构建我自己的组件并自己确定它们的范围,所以我会有我自己的雇佣关系。
直截了当:示例:假设我有一个简单的应用程序,其中包含一个 RecyclerView、Adapter、Acitivity 和一个嵌套在我的 Adapter 中的回调,我将其传递给我的 Adapter 构造函数以检测点击或其他什么,我让我的活动实现那个回调,当然我想注入适配器。
当我让 Hilt 知道我想注入我的适配器时,我需要让 Hilt 知道如何提供所有适配器依赖项——回调。
在 Dagger 中,我可以通过将 Activity 绑定到我的一个模块中的回调来实现这一点:
Dagger 知道如何绑定 Activity(或任何 Activity/Fragment),然后将其链接到该回调,但使用 Hilt 它不起作用。
我怎样才能做到这一点?如何使用 Hilt 提供或绑定 Activity 或 Fragment?
android - 无法使用 Hilt 创建 MainViewModel 的实例
我正在用一个简单的项目测试刀柄,我想要实现的是用刀柄生成我的 MainViewModel 的一个实例,这是我到目前为止所做的
主要活动
主要片段
主视图模型
RepoImpl
数据源实现
现在,这是应用程序遵循的架构,这里是我使用的简单界面Repo
。DataSource
因此,在此之后,我生成了生成实例所需的所有内容
基础应用
应用模块
上面的模块提供 tragoDao() 所以我可以在我的DataSourceImpl
.@Singleton
然后我只创建另一个模块,让 hilt 知道上面接口的实现
由于我需要 MainViewModel 的一个实例,因此我将此模块的范围设置为ActivityRetainedComponent
编译应用程序后出现此错误
java.lang.RuntimeException:无法创建类 com.g.tragosapp.ui.viewmodel.MainViewModel 的实例
依赖项
我还添加了
这没有任何区别
android - 使用 HILT 注入抽象类(基础活动)
我刚刚开始尝试在我非常简单的项目中使用 Hilt。现在一切都在 Dagger2 上,但我想迁移到 Hilt。
我有一个活动:
和这样的 BaseActivity :
另外,我有一个类使用 baseActivity 来显示一个对话框。例如 :
但是,当我尝试编译时,出现此错误:
如果没有 @Provides-annotated 方法,就无法提供 BaseActivity。
所以,我的问题是:如何构造函数注入一个抽象类。我尝试了很多东西但没有成功,比如在 Hilt 模块中:
或者(就像我对 Dagger 所做的那样):
另外,我只是 Hilt 的初学者,所以,也许我错过了一些东西。我会继续寻找 :)
感谢您的时间和回答:)
编辑 :
这几天我自己搜索了一下,这似乎有效,但似乎不太好......
但只有当我这样放置我的 baseActivity 时:
但是,在那之后,如果我尝试像这样在我的 TestComponentImpl 中使用注入的 baseActivity(就像我在 Hilt 之前使用 Dagger 所做的那样):
我还有另一个错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()”
所以我不认为我的 baseActivity 注入做得很好。我正在继续调查;)
android - 使用标志 -Adagger.hilt.disableModulesHaveInstallInCheck=true 从 Dagger 迁移到 Hilt 时抑制 @InstallIn 检查时出错
我最近一直在尝试将我的 Android 应用程序从 Dagger 迁移到 Hilt。
我想分阶段进行整个迁移,因此试图抑制 Hilt 警告,因为它没有对模块使用 @InstallIn。
一直遵循此处给出的迁移指南:https ://dagger.dev/hilt/migration-guide.html
还在这里找到了禁用@InstallIn 检查的标志:https ://dagger.dev/hilt/compiler-options.html#disable-install-in-check
但是,我一直在努力让这个标志发挥作用。
为了更好地理解这个问题,我尝试将 Dagger Codelab ( https://codelabs.developers.google.com/codelabs/android-dagger/#0 ) 迁移到 Hilt。
即使在那里也没有找到成功。
有人可以指出错误吗?我附上了 build.gradle 文件和下面生成的错误。
项目级build.gradle文件
应用级build.grade文件
生成的警告和错误: