Несоответствие типа: предполагаемый тип — GoogleSignInAccount? но ожидался GoogleSignInAccount> Задача: приложение:buildInfoGeneratorFdroidDebug

#android #firebase #kotlin

# #Android #firebase #котлин

Вопрос:

Я пытаюсь добавить вход Google в свой kotlin, но я получаю сообщение об ошибке «user_account». В нем говорится: «Несоответствие типа: предполагаемый тип — GoogleSignInAccount? но ожидался GoogleSignInAccount» Как исправить эту ошибку?

  override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == RC_SIGN_IN) {
            val task: Task<GoogleSignInAccount> = GoogleSignIn.getSignedInAccountFromIntent(data)
            try {
                val user_account = task.getResult(ApiException::class.java)
                firebaseAuthWithGoogle(user_account)
            } catch (e: ApiException) {
                Toast.makeText(this, "Google sign in failed:(", Toast.LENGTH_LONG).show()
            }
        }
    }
 

Ответ №1:

GoogleSignIn.getSignedInAccountFromIntent это метод Java, поэтому он может возвращать объект с нулевым значением, но указан ненулевой тип. Поэтому вам следует либо указать свой тип как Task<GoogleSignInAccount?> , либо использовать один из возможных способов приведения объекта к ненулевому типу.

Подробнее об этом вы можете прочитать здесь.

Комментарии:

1. первый метод не работает, есть ли какой-нибудь другой метод?

2. @BhavnaHaritsa Вы можете попытаться привести объект с нулевым значением к ненулевому типу (см. Ссылку в Ответе) или предоставить более конкретную информацию о появившейся ошибке.

Ответ №2:

Возможно, это поздний ответ, но, надеюсь, он может помочь новичкам Kotlin, таким как я, в будущем.

Я встретил точно такую же ошибку и изменил ее в следующей части, чтобы исправить:

             val user_account : GoogleSignInAccount? = task.getResult(ApiException::class.java)
            firebaseAuthWithGoogle(user_account!!)
 

Вы можете обратиться к онлайн-документу Kotlin Null Safety для получения подробной информации о null и операторе «!!».