当前位置: 首页 > 知识库问答 >
问题:

使用Hilt注入活动

邢新
2023-03-14

如何在扩展Activity而不是AppCompatActivity的类中注入改装实例?这是模块:

@InstallIn(SingletonComponent::class)
object Module {
    private const val BASE_URL = "API_URL_HERE"

    @Singleton
    @Provides
    fun provideRetrofitApi(): Api {
        return Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(Api::class.java)
    }
}

这是我的主要活动:

@AndroidEntryPoint
class MainActivity : Activity() {
    ...
    @Inject
    lateinit var api: Api
    ...

这导致

用@AndroidEntryPoint注释的活动必须是 androidx.activity.ComponentActivity 的子类。(例如 FragmentActivity、AppCompatActivity 等)[剑柄]处理未完成。有关详细信息,请参阅上面的错误。

我尝试使用@ActivityScoped而不是@Android Entry Point,但它会导致

科特林。UninitializedPropertyAccessException:lateinit 属性 api 尚未初始化。

共有2个答案

逑沛
2023-03-14

为什么不扩展ComponentActivity?这是刀柄的已知要求。

但是,如果您真的做不到,请使用@EntryPoint注释创建一个入口点。

https://developer.android.com/training/dependency-injection/hilt-android#not-supported

    val hiltEntryPoint =
      EntryPointAccessors.fromApplication(appContext, ExampleContentProviderEntryPoint::class.java)

    val analyticsService = hiltEntryPoint.analyticsService()

从你的创建活动中调用它,

百里京
2023-03-14

您忘记使用@Moules注释装饰您的模块。

@Module
@InstallIn(SingletonComponent::class)
object Module {
    private const val BASE_URL = "API_URL_HERE"

    @Singleton
    @Provides
    fun provideRetrofitApi(): Api {
         return Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(Api::class.java)
    }

}

 类似资料:
  • 我只是开始尝试在我非常简单的项目上使用Hilt。现在它都是在Dagger2上,但我想迁移到Hilt。 我有一个活动: 和下面这样的基本活动: 或者(就像我用匕首那样): 另外,我只是一个初学者,所以,也许我错过了什么。我将继续搜索:) 感谢您的时间和回答:) java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“Android.content.pm.Appli

  • 我正在用注入一个依赖于ViewModel中的的类,该模块安装在中,作用域为activity,每当我尝试编译时,它都会向我抛出一个错误。供您参考,我还有其他模块,其中ActivityRetainedComponent和SingletonComponent注入了@ApplicationContext。 现在我想弄清楚这个错误是什么意思。 代码在这里(我不认为这里有什么问题) 编辑2:我得出的结论是不可

  • 这是我的束缚 错误在于 /Users/X/AndroidStudioProjects/Corotuines/app/build/generated/source/kapt/debug/com/example/corotuines/application/ApplicationMain_HiltComponents.java:126:错误:[Dagger/Mis的绑定]com.example.cor

  • 我只是从喷气背包和剑柄开始。但是当我注入到ViewModel中时,我遇到了一些问题。 我得到的错误: 我可以在活动中注入所有细节,但不能在ViewModel中注入。我已经尝试了所有我能找到的解决办法。 我的gradle文件: 项目根级别: 模块级: 我的申请文件 我的模块文件: 项目是具有可组合屏幕的单个活动,因此主要活动: 视图模型: 我尝试过的事情: 改为ViewModelComponent而

  • 我对匕首比较陌生,我刚开始使用剑柄。我想要的是在中注入一个应用程序范围的存储库(这意味着它需要在任何地方都是相同的对象)。存储库将用于检索用户、auth令牌和诸如此类的东西。这是我能找到的最接近的: 这样一切都可以正常工作,使用debug我可以确认每次使用时都注入了相同的实例。问题是第二次调用时(例如,视图被销毁并重新创建)。我不知道我是在科特林一侧犯了什么愚蠢的错误,还是在剑柄一侧犯了什么愚蠢的