android – Firebase database initialization does not work-ThrowExceptions

Exception or error:

I’m building a user registration activity. I wrote a function to create a user and save his/her information in the realtime Database of Firebase.

I initialized the database yet when I click the button to save the user information, nothing happens.

Here is the code:

private var etfirstname: EditText? = null
private var etlastname: EditText? = null
private var etDateNaissance: EditText? = null
private var etemail: EditText? = null
private var etpassword: EditText? = null
private var btnCreateAccount: Button? = null
private var mProgressBar: ProgressDialog? = null

//Firebase References
private lateinit var mDatabase: FirebaseDatabase
private lateinit var mDatabaseReference: DatabaseReference


private val TAG = "CreateAccountActivity"

//Global variables
private var firstName: String? = null
private var lastName: String? = null
private var email: String? = null
private var password: String? = null
private var dateNaissance: String? = null


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

    //Initialise the references of Firebase database
    initialise()
}

//Function who initialise this references
private fun initialise() {
    etfirstname = findViewById<View>(R.id.signUp_prenom) as EditText
    etlastname = findViewById<View>(R.id.signUp_nom) as EditText
    etDateNaissance = findViewById<View>(R.id.signUp_dateNaissance) as EditText
    etemail = findViewById<View>(R.id.signUp_email) as EditText
    etpassword = findViewById<View>(R.id.SignUp_password) as EditText
    mProgressBar = ProgressDialog(this)

    btnCreateAccount?.setOnClickListener {
        createAccount()
    }
}

private fun createAccount() {

    mDatabase = FirebaseDatabase.getInstance()
    mDatabaseReference = FirebaseDatabase.getInstance().reference

    //We get current string values present in EditText gaps
    firstName = etfirstname?.text.toString()
    lastName = etlastname?.text.toString()
    dateNaissance = etDateNaissance?.text.toString()
    email = etemail?.text.toString()
    password = etpassword?.text.toString()

    //if there is text in the gaps
    if (!TextUtils.isEmpty(firstName) && !TextUtils.isEmpty(lastName)
        && !TextUtils.isEmpty(dateNaissance) && !TextUtils.isEmpty(email)
        && !TextUtils.isEmpty(password)
    ) {

        //We create a new user
        val mAuth = FirebaseAuth.getInstance()
        mAuth
            .createUserWithEmailAndPassword(email!!, password!!)
            .addOnCompleteListener(this) { task ->

                if (task.isSuccessful) {
                    //Sign in success, Update Ui with the signed-in user's information
                    Log.d(TAG, "User creation successful")
                    val userId: String = mAuth!!.currentUser!!.uid

                    verifyEmail()

                    //Update user profile information
                    val currentUserDb: DatabaseReference = mDatabaseReference!!.child(userId)
                    currentUserDb.child("FirstName").setValue(firstName)
                    currentUserDb.child("LastName").setValue(lastName)
                    currentUserDb.child("Birthday").setValue(dateNaissance)
                    currentUserDb.child("Email").setValue(email)
                    currentUserDb.child("Password").setValue(firstName)

                    updateUserInfoAndUI()
                } else {
                    //If sign in fail, display a message to the user
                    Log.w(TAG, "User creation failed", task.exception)
                    Toast.makeText(this, "Athentication failed", Toast.LENGTH_SHORT).show()
                }
            }

        //We show the progress bar while the registraton is done
        mProgressBar!!.setMessage("Enregistrement...")
        mProgressBar!!.show()

    } else {
        Toast.makeText(this, "Veuillez Entrer tout les d├ętails", Toast.LENGTH_SHORT).show()
    }
}

//We just start a new activity here
private fun updateUserInfoAndUI() {
    val intent = Intent(this, Home_Activity::class.java)
    //The FLAG_ACTIVITY_CLEAR_TOP clear the precedent activity so that if
    // user press back from the next activity, he should not be taken back
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    startActivity(intent)
}

//Verification of the email
private fun verifyEmail() {
    val mAuth = FirebaseAuth.getInstance()
    val mUser = mAuth!!.currentUser

    mUser!!.sendEmailVerification()
        .addOnCompleteListener(this) { task ->

            if (task.isSuccessful) {
                Toast.makeText(
                    this,
                    "Verification Email sent to " + mUser.email,
                    Toast.LENGTH_SHORT
                ).show()
            } else {
                Log.e(TAG, "sendEmailVerification", task.exception)
                Toast.makeText(this, "Failed to send verification", Toast.LENGTH_SHORT).show()
            }
        }
}
How to solve:

Leave a Reply

Your email address will not be published. Required fields are marked *