簡體   English   中英

登錄后 getUid() 在 onComplete 上返回 null

[英]getUid() returns null on onComplete after Login

這就像我的第一個或第二個 StackOverflow 問題,所以請耐心等待。

我想在登錄成功后獲得 Firebase UID。 但是,我收到getCurrentUser.getUid()為 null 的錯誤。

下面是下面的代碼

mAuth.signInWithEmailAndPassword(inputemail.getText().toString(), inputPassword.getText().toString())
.addOnCompleteListener(Login.this, new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        mUser=mAuth.getCurrentUser();
        userID = mUser.getUid();
        DocumentReference docRef = db.collection("userDB").document(userID);
        docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    String val = document.getString("type");

                    if(val.equals("client")){
                        if (mAuth.getCurrentUser().isEmailVerified()){
                            progressDialog.dismiss();
                            sendUserToNextActivity();
                            Toast.makeText(Login.this, "Login Success!", Toast.LENGTH_SHORT).show();
                        }else{
                            progressDialog.dismiss();
                            FirebaseAuth.getInstance().signOut();
                            Toast.makeText(Login.this, "Please verify email first!", Toast.LENGTH_SHORT).show();
                        }
                    }else{
                        FirebaseAuth.getInstance().signOut();
                        progressDialog.dismiss();
                        Toast.makeText(Login.this, "Employees are not permmitted!", Toast.LENGTH_SHORT).show();
                    }

                } else {

                }
            }
        });

    }
});

這是完整的錯誤日志。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bottomnavigationview, PID: 27109
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
    at com.example.bottomnavigationview.Login$3$1.onComplete(Login.java:86)
    at com.google.android.gms.tasks.zzi.run(com.google.android.gms:play-services-tasks@@18.0.1:1)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

哪個指向

userID = mUser.getUid();

有沒有其他方法或修復程序可以在成功登錄后獲取 UID? 我聽說過 onAuthStateChanged 但我似乎無法理解它。

[編輯]

注意class.FirebaseAuth mAuth中聲明了mAuth和FirebaseAuth mAuth; FirebaseUser mUser; FirebaseAuth mAuth; FirebaseUser mUser; 以及 onCreate 中的mAuth=FirebaseAuth.getInstance()

您的代碼假定登錄成功,但在onComplete中不一定是這種情況。

您需要同時處理成功和失敗,如下所示:

mAuth.signInWithEmailAndPassword(inputemail.getText().toString(), inputPassword.getText().toString())
  .addOnCompleteListener(Login.this, new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if (task.isSuccessful()) {
            mUser=mAuth.getCurrentUser();
            userID = mUser.getUid();
            ...
        }
        else {
            Log.e("Firebase", "Sign in failed", task.getException());
        }
    }
    ...

現在,如果登錄失敗,請檢查 logcat output 以找出根本原因,並修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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