0

I'm encountering some bug that I have no idea why and how to fix it. I'm just a beginner at android and firebase. I'm working on an assignment that would do a student information system.

Here is my codes

    import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.DatePickerDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
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.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;

public class Register extends AppCompatActivity {
long maxId = 0;
private FirebaseDatabase db = FirebaseDatabase.getInstance();
private DatabaseReference databaseReference = db.getReference();
    private FirebaseAuth mAuth;
    private ProgressBar progressBar;

    private static final String TAG = "Register";
    private TextView mDisplayDate;
    private DatePickerDialog.OnDateSetListener mDateSetListener;
    RadioButton radioButton;
    RadioButton radios;
    String yearlevel;
    String semester;
    String SEX;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);


        EditText id = findViewById(R.id.id);
        EditText pass = findViewById(R.id.pass);
        EditText confirm = findViewById(R.id.confirm);
        EditText name = findViewById(R.id.name);
        EditText num = findViewById(R.id.num);
        EditText email =findViewById(R.id.email);
        EditText course = findViewById(R.id.course);
        progressBar = findViewById(R.id.progressBar);

        RadioGroup sex = findViewById(R.id.sex);
        Intent mainIntent = new Intent(Register.this,MainActivity.class);
        RadioGroup group = findViewById(R.id.group);
        Button button = findViewById(R.id.register);
        mDisplayDate = findViewById(R.id.mDisplayDate);
        Spinner spinner = findViewById(R.id.spinner);

        String[] year = {"1ST YEAR","2ND YEAR","3RD YEAR","4TH YEAR"};
        ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(year));
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this,R.layout.spinner_style,arrayList);
        spinner.setAdapter(arrayAdapter);


        mDisplayDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Calendar cal = Calendar.getInstance();
                int year = cal.get(Calendar.YEAR);
                int month = cal.get(Calendar.MONTH);
                int day = cal.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog dialog = new DatePickerDialog(
                        Register.this,
                        android.R.style.Theme_Holo_Light_Dialog_MinWidth,
                        mDateSetListener,
                        year,month,day);
                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                dialog.show();
            }
        });

        mDateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int year, int month, int day) {
                month = month + 1;
                Log.d(TAG, "onDateSet: mm/dd/yyy: " + month + "/" + day + "/" + year);

                String date = month + "/" + day + "/" + year;
                mDisplayDate.setText(date);
            }
        };
      String bday =  mDisplayDate.getText().toString();

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if(snapshot.exists()){
                    maxId=(snapshot.getChildrenCount());
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {




                String Confirm = confirm.getText().toString().trim();
                String studID = id.getText().toString().trim();
                String studPass = pass.getText().toString().trim();
                String studName = name.getText().toString().trim();
                String studNum = num.getText().toString().trim();
                String studEmail = email.getText().toString().trim();
                String studCourse = course.getText().toString().trim();

                if(studID.isEmpty()){
                    id.setError("Please Enter your Student ID");
                    id.requestFocus();
                    return;
                }
                if(studName.isEmpty()){
                    name.setError("Please Enter your Full Name");
                    name.requestFocus();
                    return;
                }
                if(studNum.isEmpty()){
                    num.setError("Phone number is required!");
                    num.requestFocus();
                    return;
                }
                if(studCourse.isEmpty()){
                    course.setError("Please Enter your College Course");
                    course.requestFocus();
                    return;
                }
                if(studEmail.isEmpty()){
                    email.setError("Email is Required!");
                    email.requestFocus();
                    return;
                }
                if(studPass.isEmpty()){
                    pass.setError("Password is Required!");
                    pass.requestFocus();
                    return;
                }
                if(studPass.length()<6){
                    pass.setError("Password should be longer than 6 characters");
                    pass.requestFocus();
                    return;
                }
                if(!studPass.equals(Confirm)){
                    confirm.setError("Password do not match!");
                    return;
                }


                HashMap<String,String> userMap = new HashMap<>();
                userMap.put("Birth Date",bday);
                userMap.put("Student ID",studID);
                userMap.put("Password",studPass);
                userMap.put("Student Name",studName);
                userMap.put("Phone Number",studNum);
                userMap.put("Email Address",studEmail);
                userMap.put("College Course",studCourse);

                String Con;

                int radioId = group.getCheckedRadioButtonId();
                radioButton = findViewById(radioId);

                Con = radioButton.getText().toString();


                String Cons;
                int radioId1 = sex.getCheckedRadioButtonId();

                radios = findViewById(radioId1);
                Cons = radios.getText().toString();
                switch (Cons){
                    case "MALE":
                        SEX = "Male";
                        userMap.put("Sex",SEX);
                        break;
                    case "FEMALE":
                        SEX = "Female";
                        userMap.put("Sex",SEX);
                        break;

                    default:
                        break;
                }
                if(!radioButton.isChecked()){
                    Toast.makeText(Register.this,"Please choose a Semester",Toast.LENGTH_LONG).show();
                    group.requestFocus();
                    return;
                }
                if(!radios.isChecked()){
                    Toast.makeText(Register.this,"Please choose a Sex",Toast.LENGTH_LONG).show();
                    sex.requestFocus();
                    return;
                }
                switch (Con){
                    case "1ST SEMESTER":
                        semester = "1st Semester";
                        userMap.put("Semester",semester);
                        break;
                    case "2ND SEMESTER":
                        semester = "2nd Semester";
                        userMap.put("Semester",semester);

                        break;
                    default:
                        break;
                }



                String yearlvl = spinner.getSelectedItem().toString();
                switch(yearlvl){
                    case "1ST YEAR":
                        yearlevel = "1st Year";
                        userMap.put("Year Level",yearlevel);
                        break;
                    case "2ND YEAR":
                        yearlevel = "2nd Year";
                        userMap.put("Year Level",yearlevel);
                        break;
                    case "3RD YEAR":
                        yearlevel = "3rd Year";
                        userMap.put("Year Level",yearlevel);
                        break;
                    case "4th YEAR":
                        yearlevel = "4th Year";
                        userMap.put("Year Level",yearlevel);
                        break;
                    default:
                        break;
                }


                databaseReference.push().setValue(userMap);
                progressBar.setVisibility(View.VISIBLE);
                *mAuth.createUserWithEmailAndPassword(studEmail,studPass)*.addOnCompleteListener(new 
           OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Toast.makeText(Register.this,"REGISTERED SUCCESSFULLY",Toast.LENGTH_LONG).show();
                        progressBar.setVisibility(View.GONE);
                        startActivity(mainIntent);
                    }
                });





            }
        });

      }

    }

I having an error at this line :

mAuth.createUserWithEmailAndPassword(studEmail,studPass).addOnCompleteListener(new OnCompleteListener<AuthResult>()

The error:

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

I'm just trying to use Firebase Authentication with Email and Pass authentication. Any opinions are welcome. just newbie here. Thanks

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
what
  • 11
  • 1
  • And your error is? Can you provide us with your exception? – SlothCoding Jan 25 '21 at 14:55
  • 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 Sorry for not adding – what Jan 25 '21 at 14:59
  • If the app crashes, there is a stack trace. Please look that up on logcat, and add it to your question. Please respond with @AlexMamo – Alex Mamo Jan 25 '21 at 15:13

1 Answers1

2

You never initialize mAuth anywhere, so when you then call createUserWithEmailAndPassword on it it indeed is invalid.

You'll want to initialize mAuth in onCreate like:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    mAuth = FirebaseAuth.getInstance();

    EditText id = findViewById(R.id.id);
    EditText pass = findViewById(R.id.pass);

Also see:

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807