Проблема с OnCompleteListener в Котлине

#android #android-studio #kotlin

Вопрос:

У меня есть этот РАБОЧИЙ код в Котлине

 val listener = View.OnClickListener {
            progressDialog.show()
            auth.signInWithEmailAndPassword(etEmail.text.toString(),etPassword.text.toString())
                .addOnCompleteListener{
                        progressDialog.dismiss()
                        if (it.isSuccessful){
                            Toast.makeText(this@SignInActivity,"Logged In",Toast.LENGTH_LONG).show()
                            val intent = Intent(this@SignInActivity,MainActivity::class.java)
                            startActivity(intent)
                        } else{
                            Toast.makeText(this@SignInActivity, it.exception?.message,Toast.LENGTH_LONG).show()
                        }

                }
        }
        btnSigIn.setOnClickListener(listener)
 

Если я добавлю OnCompleteListener<AuthResult> , как показано ниже

 val listener = View.OnClickListener {
            progressDialog.show()
            auth.signInWithEmailAndPassword(etEmail.text.toString(),etPassword.text.toString())
                .addOnCompleteListener{
                    OnCompleteListener<AuthResult> { task ->
                        progressDialog.dismiss()
                        if (task.isSuccessful){
                            Toast.makeText(this@SignInActivity,"Logged In",Toast.LENGTH_LONG).show()
                            val intent = Intent(this@SignInActivity,MainActivity::class.java)
                            startActivity(intent)
                        } else{
                            Toast.makeText(this@SignInActivity, task.exception?.message,Toast.LENGTH_LONG).show()
                        }
                    }
                }
        }
        btnSigIn.setOnClickListener(listener)
 

он не показывает никаких ошибок, но НЕ работает (не входит в систему).
Мой вопрос в том, в чем может быть причина? Спасибо.

Ответ №1:

У вас есть скобки {} вокруг вашего слушателя, поэтому вы создали лямбду, которая возвращает слушателя, и это то, к чему вы переходите addOnCompleteListener . Когда лямбда будет вызвана по завершении, она создаст вашего внутреннего слушателя и ничего с ним не сделает, а затем вернется.