有人帮我指出为什么我的代码不起作用。我揣摩,但我不能找出问题 我尝试注入主持人,但我得到了错误:匕首注射不在kotlin中工作
lateinit property appComponent has not been initialized
看来,主持人一直没有注入 的AppModule
@Module
class AppModule {
@Provides @Singleton
fun provideMainPresenter(): MainActivityContract.Presenter = MainActivityPresenter()
}
AppComponent
@Singleton
@Component(modules = arrayOf(AppModule::class))
interface AppComponent {
fun inject(target: MainActivity)
}
应用
class App: Application() {
companion object {
lateinit var appComponent: AppComponent
}
override fun onCreate() {
super.onCreate()
appComponent = initDagger()
}
fun initDagger() = DaggerAppComponent.create()
}
这就是我想要注入演示者
class MainActivity : AppCompatActivity(), MainActivityContract.View, AnkoLogger {
@Inject
lateinit var presenter: MainActivityContract.Presenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
App.appComponent.inject(this)
presenter.attachView(this)
}
}
这是MainActivityPresenter它实现MainActivityContract.Presenter
class MainActivityPresenter: MainActivityContract.Presenter {
var view: MainActivityContract.View? = null
override fun attachView(view: MainActivityContract.View) {
this.view = view
}
override fun detachView() {
view = null
}
override fun performToast(text: String) {
}
}
编辑在MainActivity:我设法解决它自己: 对于所有因为我是Android初学者。当我们声明App extends Application时。我们必须体现其声明以及
<application
android:name=".App"
/>
什么样的错误? – Blackbelt
为什么不工作?请添加错误堆栈跟踪或... –
更新我的问题。 Retrofit无法提供演示者 –