Я пытаюсь сохранить данные в моей базе данных Firebase, но приложение вылетает, когда я вызываю функцию saveUserToFirebaseDatabase (). Функция executeRegister () прекрасно работает, в которой электронная почта и пароль хранятся с использованием FirebaseAuth, но когда я вызываю executeRegister (), а затем saveUserToFirebaseDatabase () прямо под ним, executeRegister () не выполняется полностью. executeRegister () предполагает создание тега log.d, который сообщает uid и успешно хранит электронную почту и пароль. Он делает это, но когда я вызываю saveUserToFirebaseDatabase () в executeRegister () в функции onCreate, он не регистрирует uid, как это было без saveUserToFirebaseDatabase (). Вместо этого в executeRegister () Log отображаются имя пользователя и passowrd, а затем переходит к saveUserToFirebaseDatabase (), в котором отображаются имя пользователя, имя и фамилия из предыдущих действий, которые пользователь должен был ввести при регистрации учетной записи. Тогда это терпит крах. Вот мой код Я хочу иметь возможность вызвать executeRegister (), затем saveUserToFirebaseDatabase (), чтобы сохранить электронную почту и пароль пользователя с помощью FirebaseAuth, а затем сохранить другую информацию пользователя в базе данных с помощью saveUserToFirebaseDatabase ().
class Password_Activity : AppCompatActivity() {
lateinit var editPasswordText: EditText
lateinit var editConfirmPasswordText: EditText
lateinit var btnOpenActivity: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_password)
editPasswordText = findViewById(R.id.edit_password)
editConfirmPasswordText = findViewById(R.id.edit_confirm_password)
btnOpenActivity = findViewById(R.id.password_continue_btn)
// btnOpenActivity.isEnabled=false
val textWatcher = object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
var passwordinput: String = editPasswordText.text.toString().trim()
var confirmpasswordinput: String = editConfirmPasswordText.text.toString().trim()
btnOpenActivity.isEnabled = passwordinput.isNotEmpty() && confirmpasswordinput.isNotEmpty()
}
}
editPasswordText.addTextChangedListener(textWatcher)
editConfirmPasswordText.addTextChangedListener(textWatcher)
// var intent = intent
// val username = intent.getStringExtra("username")
// val firstname = intent.getStringExtra("firstname")
// val lastname = intent.getStringExtra("lastname")
// val emailaddress = intent.getStringExtra("emailaddress")
val btnOpenActivity: Button = findViewById(R.id.password_continue_btn)
btnOpenActivity.setOnClickListener {
performRegister()
saveUserToFirebaseDatabase()
// val intent = Intent(this, Main2Activity_welcome_after_signup_dashboard::class.java)
// startActivity(intent)
// overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left)
}
}
// Save user's email and password
private fun performRegister(){
var intent = intent
val email = intent.getStringExtra("email")
val password = editPasswordText.text.toString().trim()
if (email.isEmpty() && password.isEmpty()) {
Toast.makeText(this, "Please enter email and password", Toast.LENGTH_SHORT).show()
return
}
Log.d("SignUpActivity","Email is "+ email)
Log.d("SignUpActivity","Password is $password")
// Initialize Firebase Auth
FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
.addOnCompleteListener {
if (!it.isSuccessful) {
Log.d("SignUp", "Account creation unsuccessful")
return@addOnCompleteListener
}
//else if successful
Log.d("SignUp", "Successfully created user with uid: ${it.result?.user?.uid}")
}
.addOnFailureListener {
Log.d("SignUp", "Failed to create user: ${it.message}")
}
}
// Save user's username, first name, and last name to database
private fun saveUserToFirebaseDatabase(){
var intent = intent
val username = intent.getStringExtra("username")
val firstname = intent.getStringExtra("firstname")
val lastname = intent.getStringExtra("lastname")
Log.d("Signup","Storing user information in password activity: $username, $firstname, $lastname")
val uid = FirebaseAuth.getInstance().uid ?: ""
val ref = FirebaseDatabase.getInstance().getReference("/users/$uid")
val user = User(uid, username, firstname, lastname)
ref.setValue(user)
.addOnSuccessListener {
Log.d("Signup","We saved the user to Firebase Database")
}
.addOnFailureListener {
Log.d("Signup", "Failed to save user to Firebase Database")
return@addOnFailureListener
}
}
//Animation for back button
override fun finish() {
super.finish()
overridePendingTransition(R.anim.slide_in_left,R.anim.slide_out_right)
}
}
data class User(val uid: String, val username: String, val firstname: String, val lastname: String)