gpt4 book ai didi

android - Dagger 未初始化 var

转载 作者:行者123 更新时间:2023-11-29 23:00:17 28 4
gpt4 key购买 nike

我在使用 Kotlin 的 Android 项目中启动 Dagger 时遇到问题。

这个结构是下一个

Dagger 包含在客户端应用程序调用的 Android 模块中

魔术盒.kt

interface MagicBox {
fun getDate(): Long?
}

MagicBoxImpl.kt

class MagicBoxImpl (): MagicBox{

var date: Long = Date().time

override fun getDate(): Long {
return date
}
}

主模块.kt

@Module
class MainModule (private val app: Application) {

@Provides
@Singleton
fun provideMagicBox(): MagicBox {
return MagicBoxImpl()
}
}

主要组件.kt

@Singleton
@Component(modules = [MainModule::class, PresenterModule::class])
interface MainComponent{
fun inject(target: Activity)
}

应用程序.kt

class Application: Application() {

lateinit var mainComponent: MainComponent

override fun onCreate() {
super.onCreate()

mainComponent = initDagger(this)
}

private fun initDagger(app: Application): MainComponent =
DaggerMainComponent.builder()
.mainModule(MainModule(app))
.build()

}

主要 Activity .kt

 @Inject
lateinit var magicBox: MagicBox

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContentView(R.layout.main_layout)
(application as ClientSdk).mainComponent.inject(this)

tvDaggerTest = findViewById(R.id.tvDaggerTest)

tvDaggerTest!!.text = magicBox.getDate().toString()
}

得到如下错误

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property magicBox has not been initialized

最佳答案

fun inject(target: Activity) 应该是 fun inject(target: MainActivity)


同样为了更好地使用 Dagger,以下内容应该是:

@Module
abstract class MainModule {
@Binds
abstract fun magicBox(impl: MagicBoxImpl): MagicBox
}

@Singleton class MagicBoxImpl @Inject constructor(): MagicBox {

关于android - Dagger 未初始化 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040168/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com