moo cow
moo cow

Reputation: 181

When using android studio on my phone, creating an account does not work with firebase

So, I just started using Firebase and can't seem to create an account when I'm on my phone vs. my emulator. I'm not sure what the problem is, but when I click the create account button it just shows me the "User already exists" toast but there is no user with the same email and the the next activity does not open.

START ACTIVITY

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class StartActivity extends AppCompatActivity {

    private Button mRegBtn;
    private ImageView imageView;
    private Button mLogInBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
        imageView= (ImageView)findViewById(R.id.imageView);
        imageView.setImageResource(R.drawable.mocha);
        mRegBtn= (Button)findViewById(R.id.start_reg_btn);
        mLogInBtn=(Button)findViewById(R.id.start_login_btn);


        mRegBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent reg_intent= new Intent(StartActivity.this, RegisterActivity.class);
                startActivity(reg_intent);
            }
        });

        mLogInBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent login_intent= new Intent(StartActivity.this, LoginActivity.class);
                startActivity(login_intent);
            }
        });

    }
}

LOGIN ACTIVITY

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class LoginActivity extends AppCompatActivity {

    private Button login_btn;
    private TextInputLayout login_email;
    private TextInputLayout login_password;
    private FirebaseAuth mAuth;
    private Toolbar mToolbar;
    private Button create_acct_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        login_email=(TextInputLayout)findViewById(R.id.login_email);
        login_password=(TextInputLayout)findViewById(R.id.login_password);
        login_btn= (Button)findViewById(R.id.login_btn);
        mToolbar=(Toolbar)findViewById(R.id.login_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Login");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mAuth = FirebaseAuth.getInstance();
        create_acct_btn=(Button)findViewById(R.id.create_acct_btn);

        login_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String displayName = login_email.getEditText().getText().toString();
                String loginPassword = login_password.getEditText().getText().toString();

                if (displayName.equals("") || loginPassword.equals("")) {
                    Toast.makeText(LoginActivity.this, "Complete fields", Toast.LENGTH_LONG).show();
                }
                else{
                    signIn(displayName, loginPassword);
                }
            }
        });

        create_acct_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent createAcc= new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(createAcc);

            }
        });

    }

    private void signIn(String email, String password) {
        mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    Intent loginHome= new Intent(LoginActivity.this, MainActivity.class);
                    startActivity(loginHome);
                    finish();
                }
                else{
                    Toast.makeText(LoginActivity.this, "User does not exist", Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}

REGISTER ACTIVITY

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.support.v7.widget.Toolbar;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;


public class RegisterActivity extends AppCompatActivity {

    private TextInputLayout mDisplayName;
    private TextInputLayout mEmail;
    private TextInputLayout mPassword;
    private Button mCreateBtn;
    private FirebaseAuth mAuth;
    private Toolbar mToolbar;
    private Button login_acct_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        mAuth = FirebaseAuth.getInstance();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        mDisplayName = (TextInputLayout) findViewById(R.id.reg_display_name);
        mEmail = (TextInputLayout) findViewById(R.id.reg_email);
        mPassword = (TextInputLayout) findViewById(R.id.reg_password);
        mCreateBtn = (Button) findViewById(R.id.reg_create_btn);
        mToolbar = (Toolbar) findViewById(R.id.register_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Create Account");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        login_acct_btn= (Button)findViewById(R.id.login_acct_btn);

        mCreateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String display_name = mDisplayName.getEditText().getText().toString();
                String email = mEmail.getEditText().getText().toString();
                String password = mPassword.getEditText().getText().toString();
                if (email.equals("") || password.equals("") || display_name.equals("")) {
                    Toast.makeText(RegisterActivity.this, "Complete Fields", Toast.LENGTH_LONG).show();
                } else {
                    registerUser(display_name, email, password);
                }

            }
        });

        login_acct_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent loginAcc= new Intent(RegisterActivity.this, LoginActivity.class);
                startActivity(loginAcc);
            }
        });

    }

    private void registerUser(final String display_name, final String email, final String password) {
        mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful() && email.length() > 5) {
                    Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
                    startActivity(mainIntent);
                    finish();
                }
                else if(email.length() < 5){
                    Toast.makeText(RegisterActivity.this, "Make email longer", Toast.LENGTH_LONG).show();
                }
                else if(password.length() < 5){
                    Toast.makeText(RegisterActivity.this, "Password must be 5 or more characters", Toast.LENGTH_LONG).show();
                }
                else {
                    Toast.makeText(RegisterActivity.this, "User already exists", Toast.LENGTH_LONG).show();
                }
            }
        });

    }
}

MAIN ACTIVITY

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class MainActivity extends AppCompatActivity {

    private FirebaseAuth mAuth;
    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAuth = FirebaseAuth.getInstance();
        mToolbar=(Toolbar)findViewById(R.id.main_page_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Mocha");

    }

    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();

        if(currentUser == null){
           sendToStart();
        }
    }

    private void sendToStart(){
        Intent startIntent= new Intent(MainActivity.this, StartActivity.class);
        startActivity(startIntent);
        finish();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.main_menu, menu);


        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);

        if(item.getItemId() == R.id.main_logout_btn){
            FirebaseAuth.getInstance().signOut();
            sendToStart();
        }


        return true;


    }
}

MANIFEST

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".StartActivity" />
        <activity
            android:name=".RegisterActivity"
            android:parentActivityName=".StartActivity" />
        <activity android:name=".LoginActivity"
            android:parentActivityName=".StartActivity"/>
    </application>

</manifest>

Any help would be appreciated!

Upvotes: 0

Views: 64

Answers (2)

moo cow
moo cow

Reputation: 181

Realized that I was missing

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></usespermission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Upvotes: 0

Raj
Raj

Reputation: 3001

The problem can be -

private void registerUser(final String display_name, final String email, final String password) {
        mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful() && email.length() > 5) {
                    Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
                    startActivity(mainIntent);
                    finish();
                }
                else if(email.length() < 5){
                    Toast.makeText(RegisterActivity.this, "Make email longer", Toast.LENGTH_LONG).show();
                }
                else if(password.length() < 5){
                    Toast.makeText(RegisterActivity.this, "Password must be 5 or more characters", Toast.LENGTH_LONG).show();
                }
                else {
                    Toast.makeText(RegisterActivity.this, "User already exists", Toast.LENGTH_LONG).show();
                }
            }
        });

    }

As when a user is created successfully and length of email is greater than 5 only then it goes to main activity. But when any one of the condition is false it moves to else if.

I think email.length()>5 condition cannot be false. So task.isSuccessful() seems to be false. It means the user is not created. So problem seems in authentication rules i.e. Sign-in method. So check that once.

Moreover you can check exactly where the error is using task.getException() Refer below code -

mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if (task.isSuccessful()) {
            Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
            startActivity(mainIntent);
            finish();
        }
        else {
            Log.i("Error is ", task.getException().toString());
        }
    }
});

Upvotes: 1

Related Questions