【问题标题】:@EntryPoint MainActivity must also be annotated with @Installin@EntryPoint MainActivity 也必须用 @Installin 注释
【发布时间】:2021-08-25 13:04:41
【问题描述】:

我在 Dagger-Hilt 上一直收到这个错误,我不知道为什么,我什至降级为一个简单的项目,看看我是否能找到我的问题,但显然我做的一切都是正确的。我创建了 Application 类,在 Manifest 文件中声明它,创建了一个提供字符串的模块,当我尝试将它注入主活动时出现错误,错误显示“D:\Programacion\Kotlin\TryingHilt\ app\build\tmp\kapt3\stubs\debug\com\y4kuzabanzai\tryinghilt\MainActivity.java:7:错误:[Hilt] 公共最终类 MainActivity 扩展 androidx.appcompat.app.AppCompatActivity { ^ @EntryPoint com.y4kuzabanzai.tryinghilt.MainActivity 也必须用 @InstallIn 注释 [Hilt] 处理未完成。有关详细信息,请参阅上面的错误。”

这是我的代码:

应用类

@HiltAndroidApp
class MyApp : Application() {
}

模块类

@Module
@InstallIn(ApplicationComponent::class)
class TestModule {

    @Singleton
    @Provides
    fun providesString(): String {
        return "Something"
    }
}

MainActivity 类

@EntryPoint
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var injectedString: String

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d("MyTag", "onCreate: $injectedString")
    }
}

【问题讨论】:

    标签: kotlin dagger-hilt


    【解决方案1】:

    您应该在这里@AndroidEntryPoint 参加活动。 @Entrypoint 用于某些不同的目的,它的用途不正确。

    @AndroidEntryPoint
    class MainActivity : AppCompatActivity() {
    
        @Inject
        lateinit var injectedString: String
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            Log.d("MyTag", "onCreate: $injectedString")
        }
    }
    

    【讨论】:

    • 但是他们说你应该使用它的方式,那我该怎么做呢?
    • 不,这是@EntryPoint 用于dagger.dev/hilt/entry-points 的链接。对于您的情况,您应该使用@AndroidEntryPoint
    • 非常感谢先生!!我觉得很愚蠢,我看错了,谢谢一百万次
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2020-08-23
    • 1970-01-01
    • 2018-11-02
    • 2018-06-27
    相关资源
    最近更新 更多