#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())
, и это сработало (вроде). Я начал возиться с ним после публикации этого комментария. Спасибо!