Login Failed When Saving Data.(Sign-up)

Viewed 61

I'm making an Android project, and for starters I have been figuring out how signing up works. By the way, I used Firebase for this. Here's my code:

package com....

import...


public class MainActivity extends AppCompatActivity {

    //VIEW AND WIDGETS
    Button createUser, moveToLoginBtn;
    EditText userEmailEdit, userPasswordEdit;

    //FIREBASE AUTH FIELDS
    FirebaseAuth nAuth;
    FirebaseAuth.AuthStateListener nAuthlistener;

    DatabaseReference mDatabaseRef, mUserCheckData;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //ASSIGN ID
        createUser = (Button) findViewById(R.id.createUserBtn);
        moveToLoginBtn = (Button) findViewById(R.id.moveToLogin);
        userEmailEdit = (EditText) findViewById(R.id.emailEditTextCreate);
        userPasswordEdit = (EditText) findViewById(R.id.passEditTextCreate);

        //ASSIGN INSTANCE
        mDatabaseRef = FirebaseDatabase.getInstance().getReference();
        mUserCheckData =  FirebaseDatabase.getInstance().getReference().child("Users");
        nAuth = FirebaseAuth.getInstance();


        nAuthlistener = new FirebaseAuth.AuthStateListener(){
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                FirebaseUser user = firebaseAuth.getCurrentUser();

                if (user != null) {

                    final String emailForVer = user.getEmail();
                    mUserCheckData.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {

                            checkUserValidation(dataSnapshot, emailForVer);

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });

                } else {


                }


            }

        };

        //ON CLICK LISTENER

        createUser.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {

            final String userEmailString, userPassString;
            userEmailString = userEmailEdit.getText().toString().trim();
            userPassString = userPasswordEdit.getText().toString().trim();

             if (!TextUtils.isEmpty(userEmailString) && !TextUtils.isEmpty(userPassString))
             {
                 nAuth.createUserWithEmailAndPassword(userEmailString,userPassString).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                     @Override
                     public void onComplete(@NonNull Task<AuthResult> task) {

                        if (task.isSuccessful())
                        {


                            DatabaseReference mChildDatabase = mDatabaseRef.child("Users").push();
                            String key_user = mChildDatabase.getKey();
                            mChildDatabase.child("isVerified").setValue("unverified");
                            mChildDatabase.child("userKey").setValue(key_user);
                            mChildDatabase.child("emailUser").setValue(userEmailString);
                            mChildDatabase.child("passWordUser").setValue(userPassString);
                            Toast.makeText(MainActivity.this, "User Account Created!", Toast.LENGTH_LONG).show();

                            startActivity(new Intent(MainActivity.this, Profile.class));
                        }
                        else
                        {
                            Toast.makeText(MainActivity.this, "User Account Creation Fail", Toast.LENGTH_LONG).show();
                            startActivity(new Intent(MainActivity.this, MainActivity.class));

                        }
                     }
                 });
             }



            }
        });

        //MOVE TO LOGIN

        moveToLoginBtn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){

            startActivity(new Intent(MainActivity.this, LoginActivity.class));



            }
        });

    }

    private void checkUserValidation(DataSnapshot dataSnapshot, String emailForVer) {


        Iterator iterator = dataSnapshot.getChildren().iterator();

        while (iterator.hasNext())
        {

            DataSnapshot dataUser = (DataSnapshot) iterator.next();



            if(String.valueOf(dataUser.child("emailUser").getValue()).equals(emailForVer) &&  dataUser.child("emailUser") != null)
            {

                if(String.valueOf(dataUser.child("isVerified").getValue()).equals("unverified") && dataUser.child("isVerified") != null)
                {

                    Intent in = new Intent(MainActivity.this, Profile.class);
                    in.putExtra("USER_KEY" ,  String.valueOf(dataUser.child("userKey").getValue()));
                    startActivity(in);
                    //in.putExtra("NAME_KEY" ,  String.valueOf(dataUser.child("nameKey").getValue()));



                }else
                {
                    startActivity(new Intent(MainActivity.this, Welcome.class));
                }

            }

        }

    }

    @Override
    protected void onStart() {
        super.onStart();

        nAuth.addAuthStateListener(nAuthlistener);
    }

    @Override
    protected void onStop() {
        super.onStop();

        nAuth.removeAuthStateListener(nAuthlistener);
    }
}

I think I have implemented my methods correctly. But it toasts:

User Account Creation Failed

Is my checkUseValidation() method wrong? Any kind of help is appreciated.

Also please pay attention to my:

 public void onComplete

method, I have set it right I think. I don't know why the data isn't getting saved to the firebase database. Or why is the task unsuccesful as show in line:

  if (task.isSuccessful())

Thank you very much.

2 Answers

First, you should change the toast, in your fail condition, to

Toast.makeText(MainActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();

So that you get what wrong in the task.

But before that did you enable Email/Password in the console????

See Sign up new users from url: https://firebase.google.com/docs/auth/android/start/?authuser=0

If task.isSuccessful() is false.You can add this to get error

Log.w(TAG, "createUserWithEmail:failure",task.getException());

Update you code as:

createUser.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {

                final String userEmailString, userPassString;
                userEmailString = userEmailEdit.getText().toString().trim();
                userPassString = userPasswordEdit.getText().toString().trim();

                if (!TextUtils.isEmpty(userEmailString) && !TextUtils.isEmpty(userPassString))
                {
                    nAuth.createUserWithEmailAndPassword(userEmailString,userPassString).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {

                            if (task.isSuccessful())
                            {


                                DatabaseReference mChildDatabase = mDatabaseRef.child("Users").push();
                                String key_user = mChildDatabase.getKey();
                                mChildDatabase.child("isVerified").setValue("unverified");
                                mChildDatabase.child("userKey").setValue(key_user);
                                mChildDatabase.child("emailUser").setValue(userEmailString);
                                mChildDatabase.child("passWordUser").setValue(userPassString);
                                Toast.makeText(MainActivity.this, "User Account Created!", Toast.LENGTH_LONG).show();

                                startActivity(new Intent(MainActivity.this, Profile.class));
                            }
                            else
                            {
                                Log.w("TAG", "createUserWithEmail:failure",task.getException());
                                Toast.makeText(MainActivity.this, "User Account Creation Fail", Toast.LENGTH_LONG).show();
                                startActivity(new Intent(MainActivity.this, MainActivity.class));

                            }
                        }
                    });
                }



            }
        });

You should see warning in logcat:

Logcat Android

Related