java - 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 身份验证与电子邮件和通过身份验证一起使用。欢迎任何意见。只是这里的新手。谢谢
解决方案
你永远不会在任何地方初始化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);
另见:
- Firebase 关于开始使用身份验证的文档,其中在步骤 2 中显示了此代码。
- 什么是 NullPointerException,我该如何解决?
推荐阅读
- php - 从数据库中删除一行后,有没有办法在 MYSQL 中自动递增?
- docker-compose - docker-compose:不接受以“x-”开头的扩展名(无效的顶级属性“x-...”)
- javascript - 如何防止网站因不活动而将您注销
- http - 重定向后如何获取lighttpd服务器地址?
- php - 如何分解要在图像标签中使用的字符串
- reactjs - 在本机反应中更新平面列表中的参数
- php - 如何在查询中为 where IN 制作准备好的语句?
- flutter - 连接多个文本字段以在 Flutter 中充当单个字段
- python - Python / Pandas:按顺序填充 NaN - 线性插值 --> ffill --> bfill
- matlab - Matlab pdf图形中的标签格式问题