gpt4 book ai didi

android - Dagger2 不注入(inject)

转载 作者:行者123 更新时间:2023-11-29 16:51:06 25 4
gpt4 key购买 nike

我是 android 的新手,正在尝试使用 Dagger2。我花了一整夜,仍然不知道为什么我的 Dagger 不提供演示者。这是我的代码(我使用 Kotlin)

应用组件

@Singleton
@Component(modules = arrayOf(PresenterModule::class))
interface AppComponent {

fun inject(target: SplashActivity)

}

PresenterModule

@Module
class PresenterModule {

@Provides
@Singleton
fun provideSplashPresenter(): SplashPresenter {
return SplashPresenter()
}
}

应用

class App: Application() {

companion object {
lateinit var appComponent: AppComponent
}

override fun onCreate() {
super.onCreate()
appComponent = initDagger()
}

private fun initDagger(): AppComponent {
return DaggerAppComponent.create()
}
}

这是主持人

class SplashPresenter: BasePresenterImpl<SplashContract.View>(), SplashContract.Presenter {

override fun performToast(mess: String) {
logi("abc", "performToast")
logi("abc", "mess: " + mess)
mView?.showLoading()
if (mess.isNullOrBlank()) {
mView?.showTosat("this is empty mess") ?: logi("abc", "null")
} else {
mView?.showTosat(mess) ?: logi("abc", "null")
}
mView?.hideLoading()

}
}

最后,这是我的 SplashActivity

class SplashActivity : BaseActivity(), SplashContract.View {


@Inject
lateinit var presenter: SplashPresenter

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

presenter.attachView(this)

//TODO: check log in
//TODO: If logged in => start main screen
//TODO: If not logged in => load login activity

button.setOnClickListener{
presenter.performToast(editText.text.toString())
logi("abc", "perform clicked")
}
}
}

当我运行这些代码时,出现了这个错误Lateinit property presenter 还没有初始化,也就是说“Inject”不起作用

最佳答案

因为你在这里没有使用构造函数注入(inject)(你不能这样做,因为你不“拥有” Activity 的构造函数)Dagger 不知道它必须向你的 Activity< 中注入(inject)一些东西。你必须像这样手动注入(inject):

(applicationContext as App).appComponent.inject(this) 

SplashActivityonCreate() 方法中(当然是在使用演示器之前)。

其次,您的演示者需要一个构造函数来告诉 Dagger 如何构造/“构建”演示者,这意味着用 @Inject 注释注释的构造函数,因此:

class SplashPresenter @Inject constructor(): BasePresenterImpl<SplashContract.View>(), SplashContract.Presenter 

关于android - Dagger2 不注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46394847/

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