Невозможно передать контекст между двумя классами [kotlin] - PullRequest
0 голосов
/ 03 июня 2019

Итак, я новичок в Kotlin.У меня есть два класса LoginActivity и DashboardActivityDashboardActivity у меня есть метод:

fun createActivity(context: Context){
        val intent = Intent(context, DashboardActivity::class.java)
        startActivity(intent)
}

, а в LoginActivity, когда пользователь нажимает кнопку для входа в систему, у меня есть метод, который вызывает предыдущий метод:

private fun onClickLogin() {
        val username : String = editTextUsername.text.toString()
        val password : String = editTextPassword.text.toString()

        if (username.isEmpty()){
            editTextUsername.error = "Insira um username"
            return
        }
        if (password.isEmpty()){
            editTextPassword.error = "Insira uma password"
            return
        }

       if (username.compareTo("user") == 0 && password.compareTo("password") == 0){
           DashboardActivity().createActivity(this)
       }
}

Проблема в том, что каждый раз, когда я пытаюсь вызвать DashboardActivity (). CreateActivity (this) , я получаю NullPointerException .Вот logcat:

Нажмите здесь, пожалуйста

Итак, почему я получаю эту ошибку?Это потому, что я не могу передать контекст таким образом?Я пытался использовать this@LoginActivity, но не работал ...

Ответы [ 3 ]

1 голос
/ 03 июня 2019

вы не можете сделать это: DashboardActivity().createActivity(this) в этой строке вы пытаетесь инициализировать действие, а затем используете метод.

Что вы должны сделать, это:
1.

startActivity(DashboardActivity.createActivity(this))

2.
In DashboardActivity.kt

companion object {
      fun createActivity(context: Context): Intent {
        return Intent(context, DashboardActivity::class.java)
      }
}

Это создает createActivity метод как «статический», что означает, что вы можете получить доступ без необходимости инициализации экземпляра этого класса.

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

использовать ApplicationContext

fun createActivity(){
    val intent = Intent(applicationContext, DashboardActivity::class.java)
    startActivity(intent)
}
0 голосов
/ 03 июня 2019

каждый раз, когда я пытаюсь вызвать DashboardActivity (). CreateActivity (this), я получаю исключение NullPointerException

Никогда не создавайте экземпляр класса активности самостоятельно.

почему я получаю эту ошибку?

Поскольку вы сами создали экземпляр DashboardActivity и попытались его использовать.

Я пытался использовать это @ LoginActivityно не сработало ...

Сделать createActivity() быть функцией companion object.Это потребует небольшого изменения в вашей реализации, вызывая startActivity() для переданного Context.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...