Search code examples
javaandroidandroid-layoutandroid-activity

Application is unexpectedly crashed when button is clicked


I'm totally new to Android development and I'm working in my Android application my application includes signup and login activity. So I'm working on Signup activity but the application stops working when I click on the Register button.

And also I got it that it is because of NullPointerException but I'm unable to solve the problem.

The error I receive is the application is unexpectedly stopped... Hope I make it clear for you guys.

SignupActivity.java

package com.example.kiit.shoppar;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
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;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Locale;

public class SignupActivity extends AppCompatActivity {
    Button reg;
    EditText fname, lname, pass, inputEmail, phone;
    FirebaseAuth auth;

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

        fname = (EditText) findViewById(R.id.txtfname);
        lname = (EditText) findViewById(R.id.txtlname);
        pass = (EditText) findViewById(R.id.txtpass);
        inputEmail = (EditText) findViewById(R.id.txtemail);
        phone = (EditText) findViewById(R.id.txtphone);
        reg = (Button) findViewById(R.id.btnreg);
        reg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        final String firstName = fname.getText().toString().trim();
        final String lastName = lname.getText().toString().trim();
        final String email = inputEmail.getText().toString().trim();
        final String password = pass.getText().toString().trim();
        final String phoneno = phone.getText().toString().trim();

        if (TextUtils.isEmpty(firstName)) {
            Toast.makeText(getApplicationContext(), "Enter first name!", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(lastName)) {
            Toast.makeText(getApplicationContext(), "Enter last name!", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(email)) {
            Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(password)) {
            Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(phoneno)) {
            Toast.makeText(getApplicationContext(), "Enter phone number!", Toast.LENGTH_SHORT).show();
            return;
        }

        if (password.length() < 6) {
            Toast.makeText(getApplicationContext(), "Password too short, enter minimum 6 characters!", Toast.LENGTH_SHORT).show();
            return;
        }

        if (phoneno.length() < 10) {
            Toast.makeText(getApplicationContext(), "Invalid Phone Number!", Toast.LENGTH_SHORT).show();
            return;
        }
        //progressBar.setVisibility(View.VISIBLE);
        //create user

        auth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();

                //progressBar.setVisibility(View.GONE);
                // If sign in fails, display a message to the user. If sign in succeeds
                // the auth state listener will be notified and logic to handle the
                // signed in user can be handled in the listener.
                if (!task.isSuccessful()) {
                    Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
                            Toast.LENGTH_SHORT).show();
                } else {
                    HashMap<String, Object> map = new HashMap<String, Object>();
                    final FirebaseUser user = task.getResult().getUser();
                    map.put("user_id", user.getUid());
                    map.put("email", email);
                    map.put("last_connection", Calendar.getInstance(Locale.US).getTimeInMillis());
                    DatabaseReference userDbRef = FirebaseDatabase.getInstance().getReference().child("user").child(user.getUid());
                    userDbRef.setValue(map)
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        // Update the username
                                        UserProfileChangeRequest updateRequest =
                                                new UserProfileChangeRequest.Builder()
                                                        .setDisplayName(firstName)
                                                        .build();

                                        auth.getCurrentUser().updateProfile(updateRequest).addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {
                                                 startActivity(new Intent(SignupActivity.this, LoginActivity.class));
                                                finish();
                                            }
                                        });

                                    } else {
                                        //user.delete();
                                        Toast.makeText(SignupActivity.this,
                                                "Could not add the user to the database", Toast.LENGTH_SHORT).show();
                                    }
                                 }
                              });
                          }
                      }
                 });
            }
        });
    }
}

Error

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.kiit.shoppar, PID: 14665
java.lang.NullPointerException: Attempt to invoke virtual method 
'com.google.android.gms.tasks.Task  com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(java.lang.String, java.lang.String)' on a null object reference
at com.example.kiit.shoppar.SignupActivity$1.onClick(SignupActivity.java:90)
at android.view.View.performClick(View.java:6294)
at android.view.View.onKeyUp(View.java:12470)
at android.widget.TextView.onKeyUp(TextView.java:7475)
at android.view.KeyEvent.dispatch(KeyEvent.java:2715)
at android.view.View.dispatchKeyEvent(View.java:11713)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834)
at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:440)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1819)
at android.app.Activity.dispatchKeyEvent(Activity.java:3267)
at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:316)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:354)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4733)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4605)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4293)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4174)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4350)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4174)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4326)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4487)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2435)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1998)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1989)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2412)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:325)
at android.os.Looper.loop(Looper.java:142)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Application terminated.

Solution

  • Your instance variable auth is null or never assigned properly, should you be calling auth = FirebaseAuth.getInstance() first?