问题标签 [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.

0 投票
1 回答
8535 浏览

android - 如何在 Kotlin [Dagger-Hilt] 中创建和使用房间数据库

这是一个自我回答的问题,因为我在我的项目中遇到了代表曝光问题,但在经过几个小时的研究后最终解决了这个问题。我没有保持沉默,而是认为这可能会在未来帮助某人。本教程演示了如何创建 Room 数据库并在活动/片段中使用它。此处给出的示例用例是查询数据库的大小并更新片段中的视图。

注意:下面的代码中有一些 Dagger-Hilt 依赖注入,但如果您手动执行自己的依赖注入,则应该应用相同的方法。我也希望你对 MVVM 架构有一些基本的了解。如果您对涉及 LiveData 的其他方法感兴趣,您可能会在此处找到有用的 Java 相关问题:resource 1 , resource 2 ; 然而,重点是 Kotlin,这个解决方案不需要 LiveData。

0 投票
1 回答
2533 浏览

android - Android Hilt - 多模块项目转换错误

我正在尝试将刀柄用于包含动态功能的项目。我面临一个我无法完全理解原因的错误。我收到这样的错误:

LOGİN MODULE 中的我的 ViewModel(动态功能)

我在登录模块中的片段

我在 UI 模块中的基本片段

我的应用程序模块中的应用程序类

我在应用模块中的主要活动

我从 App 模块调用 IntroFragment。然后应用程序崩溃。

项目结构如下所示:

项目结构

0 投票
0 回答
537 浏览

android - 使用 Robolectric 和 Dagger Hilt 启动 Fragment 时不注入 Fragment 的属性

使用RobolectricDagger Hilt启动片段时,不会在片段中注入后期初始化字段。

我有以下测试:

我的 TestFragment 看起来像这样:

当我尝试运行此测试时,它会显示错误kotlin.UninitializedPropertyAccessException: lateinit property testClass has not been initialized

我使用官方文档launchFragmentInHiltContainer中的方法,但是当我只使用.lunchFragmentInContainerandroidx.fragment.app.testing

当我使用模拟器而不是 Robolectric 时,字段被正确注入。

我试图添加:

并从控制台运行测试,但测试仍然失败

0 投票
1 回答
1966 浏览

android - Hilt 依赖注入,在提供的模块内滑动模块

我是新手,我不知道我在做什么是错误的,还是因为其他原因而无法正常工作,所以请多多包涵。

我想将一个依赖于另一个类的类注入到视图持有者类中。

视图持有者扩展了 BaseViewHolder,我要注入的类是一个依赖于 glide 的图像助手类。

我有一个提供滑行的模块

这个模块在我的应用程序的其他地方使用,所以我知道它可以工作。

我已经用@Inject 注释了图像帮助器构造函数,我正在尝试像这样将注入滑翔到这个类中

然后在我的视图持有者中,我用@Inject 注释了图像助手

在我的 findViewIds 方法中,我尝试访问图像助手但它为空,

所以我尝试为它构建一个模块,没有任何乐趣

任何帮助表示赞赏

0 投票
3 回答
5658 浏览

android - Hilt Fragments 必须附加到 @AndroidEntryPoint Activity。找到:类 androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity

运行单元测试代码时出现以下错误。

这是我的测试代码。

对这个问题有任何想法吗?

0 投票
1 回答
310 浏览

android - 通过为 Mockwebserver 提供基本 url 来解决错误

在我的应用程序中,我使用 Hilt 进行依赖注入。我在我的存储库中实现了一个RetrofitModule为它提供依赖项,如下所示:

为了为被测的 Mockwebserver 配置提供测试基础 url,我在MyApplicationandMyApplicationTest类中实现了函数

MyApplication.class

MyApplicationTest.class

但是当我构建应用程序时,我收到了这个错误:

我认为问题在于这种方法

并且通过提供 MyApplication 类存在问题

0 投票
2 回答
9392 浏览

android - 如何使用 Hilt 绑定/提供 Activity 或 Fragment?

我正在尝试在 Android 应用程序上实现 Hilt,虽然与 Dagger 相比,它很容易实现并删除了很多样板代码,但我想念一些东西,比如构建我自己的组件并自己确定它们的范围,所以我会有我自己的雇佣关系。

直截了当:示例:假设我有一个简单的应用程序,其中包含一个 RecyclerView、Adapter、Acitivity 和一个嵌套在我的 Adapter 中的回调,我将其传递给我的 Adapter 构造函数以检测点击或其他什么,我让我的活动实现那个回调,当然我想注入适配器。

当我让 Hilt 知道我想注入我的适配器时,我需要让 Hilt 知道如何提供所有适配器依赖项——回调。

在 Dagger 中,我可以通过将 Activity 绑定到我的一个模块中的回调来实现这一点:

Dagger 知道如何绑定 Activity(或任何 Activity/Fragment),然后将其链接到该回调,但使用 Hilt 它不起作用。

我怎样才能做到这一点?如何使用 Hilt 提供或绑定 Activity 或 Fragment?

0 投票
1 回答
2212 浏览

android - 无法使用 Hilt 创建 MainViewModel 的实例

我正在用一个简单的项目测试刀柄,我想要实现的是用刀柄生成我的 MainViewModel 的一个实例,这是我到目前为止所做的

主要活动

主要片段

主视图模型

RepoImpl

数据源实现

现在,这是应用程序遵循的架构,这里是我使用的简单界面RepoDataSource

因此,在此之后,我生成了生成实例所需的所有内容

基础应用

应用模块

上面的模块提供 tragoDao() 所以我可以在我的DataSourceImpl.@Singleton

然后我只创建另一个模块,让 hilt 知道上面接口的实现

由于我需要 MainViewModel 的一个实例,因此我将此模块的范围设置为ActivityRetainedComponent

编译应用程序后出现此错误

java.lang.RuntimeException:无法创建类 com.g.tragosapp.ui.viewmodel.MainViewModel 的实例

依赖项

我还添加了

这没有任何区别

0 投票
1 回答
6178 浏览

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 注入做得很好。我正在继续调查;)

0 投票
2 回答
1900 浏览

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文件

生成的警告和错误