![](/img/trans.png)
[英]Attempt to invoke virtual method boolean java.lang.String.equals(java.lang.Object) on a null object reference in android studio firebase mainactivity
[英]java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
[輸入圖像德
private void LoginUser(final String email,final String password) {
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference mRootRef = FirebaseDatabase.getInstance("https://fyp2-darren-default-rtdb.asia-southeast1.firebasedatabase.app").getReference();
mRootRef.child("Users").child(uid).child("User Information").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.child("userType").getValue(String.class).equals("admin")) {
Toast.makeText(LogInActivity.this, "LogIn successful", Toast.LENGTH_LONG).show();
Intent intent = new Intent(LogInActivity.this, AdminMainPageActivity.class);
startActivity(new Intent(getApplicationContext(), AdminMainPageActivity.class));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} else if (dataSnapshot.child("userType").getValue(String.class).equals("users")) {
Toast.makeText(LogInActivity.this, "LogIn successful", Toast.LENGTH_LONG).show();
Intent intent = new Intent(LogInActivity.this, HomePage.class);
startActivity(new Intent(getApplicationContext(), AdminMainPageActivity.class));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
// startActivity(new Intent(getApplicationContext(), PatientMainPageActivity.class));
}
}
在這里寫]( https://i.stack.imgur.com/DwJHw.png )LogInActivity$2.onDataChange(LogInActivity.java:86)
幾天前,這個仍然登錄仍然有效,但突然我嘗試使用新帳戶登錄並發生這種情況
看起來 UID 沒有節點,或者該節點沒有字符串屬性userType
。
您的代碼可能應該通過以下方式為用戶處理節點缺失的情況:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) throw new IllegalStateException("User "+uid+" not found in database");
...
}
也可能是 UID 節點存在,但沒有userType
。 我建議實際驗證用戶節點在安全規則中始終具有userType
以驗證數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.