Во-первых, почему вы заставляете обнуляемый тип запускаться самостоятельно?Почему вы не называете это безопасным способом, как это presenter?.func()
? Принудительный вызов вызовет сбой вашего приложения, но безопасный вызов - нет.
Во-вторых, переместите эти строки ниже в onStart()
presenter = MainActivityPresenterImpl()
presenter?.getMainWeather("London")
Я бы хотел порекомендовать вам использовать в интерфейсе Presenter MainActivityView
, который реализует вашу MainActivity.Я не вижу, когда вы установите его в presenter
.
Пример ->
BasePresenter:
abstract class BasePresenter<View : BaseView> {
protected var view: View? = null
open fun attachView(view: View) {
this.view = view
}
open fun detachView(view: View) {
if (this.view == view) {
this.view = null
}
}
}
interface BaseView {
fun showError(error: String)
}
Presenter:
class MainPresenter() : BasePresenter<MainActivityView>() {
private fun getMainWeather(name: String) {
view?.showProgress(true)
...
}
}
MainActivity:
@Inject
protected lateinit var presenter: MainPresenter
...
override fun onStart() {
super.onStart()
presenter.attachView(this)
}
override fun onStop() {
presenter.detachView(this)
super.onStop()
}
И да, я использую Dagger 2 для предоставления зависимостей.Вы можете использовать это как мне грустно:
presenter = MainActivityPresenterImpl()
presenter?.getMainWeather("London")
Но если вы хотите, вы можете взглянуть на простую реализацию Dagger 2 для небольшого проекта.