我的应用使用 FirebaseAuth。在我的 SignInActivity 中,单击登录按钮后,将signInWithEmailAndPassword onCompleteListener使用 Intent 启动我的 DashboardActivity。在 DashboardActivity 中,FirebaseAuth.getInstance().getCurrentUser().getUid()如果尝试登录的用户不存在,该方法会调用该方法会使我的应用程序崩溃。
这里的问题是:如果没有发送 Intent,为什么要调用该方法?还是发送了意图?
这是我的 SignInActivity 登录按钮代码:
signIn.setOnClickListener((new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!email.getText().toString().equals("") && !password.getText().toString().equals("")) {
showProgressBar();
FirebaseAuth.getInstance().signInWithEmailAndPassword(email.getText().toString(), password.getText().toString()).addOnCompleteListener((new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
hideProgressBar();
Toast.makeText(SignInActivity.this, "Signed In", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(SignInActivity.this, DashboardActivity.class);
startActivity(intent);
finish();
}
})).addOnFailureListener((new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
hideProgressBar();
Toast.makeText(SignInActivity.this, "Failed to Sign In", Toast.LENGTH_SHORT).show();
}
}));
} else {
Toast.makeText(SignInActivity.this, "please fill all fields", Toast.LENGTH_SHORT).show();
}
}
}));
DashboardActivity 代码(使应用程序崩溃):
private void queryDB() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child(getString(R.string.users))
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child("securityLevel");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String secLevel = dataSnapshot.getValue(String.class);
if (secLevel.equals("1")) {
fab.hide();
} else {
fab.show();
}
Log.d(TAG, "onDataChange: +-+ " + secLevel);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
日志猫:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
at com.quwaysim.regapp.DashboardActivity.queryDB(DashboardActivity.java:191)
at com.quwaysim.regapp.DashboardActivity.onCreate(DashboardActivity.java:60)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127).......