Приложение для Android: почему не работает мой пароль для обновления?

#android #kotlin #firebase-authentication

#Android #kotlin #firebase-аутентификация

Вопрос:

У меня работает действие входа в систему, но, похоже, я не могу обновить пароль пользователя после входа в систему. Когда я это делаю, появляется сообщение о сбое пароля. Я думаю, проблема может заключаться в том, что currentUser переменная не была определена в этом скрипте, но я не уверен, поскольку я довольно новичок в разработке Android.

 package com.example.testapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.TextUtils
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import com.google.android.gms.tasks.OnCompleteListener
import com.google.firebase.auth.FirebaseAuth

class UpdatePassword : AppCompatActivity() {

    private lateinit var auth: FirebaseAuth

    private lateinit var passwordEt: EditText

    private lateinit var changePasswordBtn: Button
    private lateinit var back: Button

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

        auth = FirebaseAuth.getInstance()

        passwordEt = findViewById(R.id.password_edt_text)

        changePasswordBtn = findViewById(R.id.reset_pass_btn)
        back = findViewById(R.id.back_btn)

        back.setOnClickListener{
            finish()
        }

        changePasswordBtn.setOnClickListener{
            var password: String = passwordEt.text.toString()
            if (TextUtils.isEmpty(password)) {
                Toast.makeText(this, "Please enter password", Toast.LENGTH_LONG).show()
            } else {
                auth.currentUser?.updatePassword(password)
                    ?.addOnCompleteListener(this, OnCompleteListener { task ->
                        if (task.isSuccessful) {
                            Toast.makeText(this, "Password changes successfully", Toast.LENGTH_LONG)
                                .show()
                            finish()
                        } else {
                            Toast.makeText(this, "password not changed", Toast.LENGTH_LONG)
                                .show()
                        }
                    })
            }
        }
    }
}
  

Ответ №1:

При сбое задачи возникает исключение, которое вы можете проверить, чтобы выяснить причину сбоя. Я рекомендую зарегистрировать его:

 auth.currentUser?.updatePassword(password)
    ?.addOnCompleteListener(this, OnCompleteListener { task ->
        if (task.isSuccessful) {
            Toast.makeText(this, "Password changes successfully", Toast.LENGTH_LONG).show()
            finish()
        } else {
            Log.e("updatePassword", "error", task.exception)
            Toast.makeText(this, "password not changed", Toast.LENGTH_LONG).show()
        }
    })
  

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

1. Это выдает ошибку, подчеркивающую «исключение»: ошибка вывода типа. Ожидаемое несоответствие типов: требуется: Строка! найдено: Исключение? «Исключение?» выделено красным цветом.

2. Похоже, e требуется 3 параметра. Обновлено, но я также настоятельно рекомендую прочитать документы API , если вы получаете подобную ошибку, чтобы узнать, какие параметры ожидает метод.

3. Я на самом деле изменил строку на Log.e("updatePassword", task.getException().toString()) , и это сработало (вроде). Я начал возиться с ним после публикации этого комментария. Спасибо!