Почему Moxy не инициализировал докладчика (Kotlin, Android) - PullRequest
0 голосов
/ 05 апреля 2019

Я получил ошибку, что mPresenter не был инициализирован. Я не понял, ПОЧЕМУ?
Я получаю эту ошибку, когда использую Kotlin, но если я использую JAVA, то все в порядке
Вот мой код

View

@StateStrategyType(value = AddToEndStrategy::class)
interface IHelloWorldView : MvpView {
    fun showMessage(message: Int)
}

Presenter

@InjectViewState
class HelloWorldPresenter : MvpPresenter<IHelloWorldView>() {
    fun show() = viewState.showMessage(R.string.message)
}

MainActivity

class MainActivity : MvpAppCompatActivity(), IHelloWorldView {

    @InjectPresenter
    lateinit var mPresenter: HelloWorldPresenter

    lateinit var mText: TextView
    lateinit var mButton: Button

    override fun showMessage(message: Int) {
        mText.setText(message)
    }

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

        mText = findViewById(R.id.text)
        mButton = findViewById(R.id.button)
        mButton.setOnClickListener {
            mPresenter.show()
        }
    }
}

1 Ответ

0 голосов
/ 20 июня 2019

Потому что вам нужно его инициализировать как в JAVA Foo foo = new Foo();

Похоже, вы только создали переменную

class MainActivity : MvpAppCompatActivity(), IHelloWorldView {

    @InjectPresenter
    lateinit var mPresenter: HelloWorldPresenter
    //initialisation

    @ProvidePresenterTag(presenterClass = HelloWorldPresenter::class, type =PresenterType.GLOBAL)
    fun providemPresenter() = HelloWorldPresenter()
    fun mPresenter() = HelloWorldPresenter()

    lateinit var mText: TextView
    lateinit var mButton: Button

    override fun showMessage(message: Int) {
        mText.setText(message)
    }

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

        mText = findViewById(R.id.text)
        mButton = findViewById(R.id.button)
        mButton.setOnClickListener {
            mPresenter.show()
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...