首页 > 解决方案 > Firebase Android emailpass 身份验证错误

问题描述

我遇到了一些我不知道为什么以及如何修复它的错误。我只是 android 和 firebase 的初学者。我正在做一个学生信息系统的任务。

这是我的代码

    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);
                    }
                });





            }
        });

      }

    }

我在这一行有一个错误:

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

错误:

java.lang.NullPointerException:尝试在空对象引用

我只是尝试将 Firebase 身份验证与电子邮件和通过身份验证一起使用。欢迎任何意见。只是这里的新手。谢谢

标签: javaandroidfirebase-realtime-databasefirebase-authentication

解决方案


你永远不会在任何地方初始化mAuth,所以当你调用createUserWithEmailAndPassword它时它确实是无效的。

你会想要mAuth像这样初始化onCreate

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);

另见:


推荐阅读