簡體   English   中英

java.lang.NullPointerException:嘗試在 null object 引用上調用虛擬方法“boolean java.lang.String.equals(java.lang.Object)”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM