FirebaseUser getEmail()中的空值

时间:2018-10-19 14:06:53

标签: android firebase firebase-authentication

嗯,抱歉,因为我需要一点帮助。我检查了网络,但似乎还没有找到解决方法。

我在这里遇到错误:

  

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String com.google.firebase.auth.FirebaseUser.getEmail()'           在com.flipflop.flipflop_gmap.Utility.FirebaseMethods $ 1.onComplete(FirebaseMethods.java:63)           com.google.android.gms.tasks.zzj.run(未知来源)           在android.os.Handler.handleCallback(Handler.java:739)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:135)           在android.app.ActivityThread.main(ActivityThread.java:5254)           在java.lang.reflect.Method.invoke(本机方法)           在java.lang.reflect.Method.invoke(Method.java:372)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:904)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

这是我的代码:

public void registerNewEmail(final String email, String password, final String username){
        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Timber.tag(TAG).d("createUserWithEmail:onComplete:%s", task.isSuccessful());
                        if (!task.isSuccessful()) {
                            Toast.makeText(mContext, "Authentication Failed.",
                                    Toast.LENGTH_SHORT).show();

                    }
                    else if(task.isSuccessful()){
                        user = FirebaseAuth.getInstance().getCurrentUser();

                        if (user.getEmail() != null) ***ERROR HERE***
                            sendVerificationEmail();

                        try {
                            userID = mAuth.getCurrentUser().getUid();
                        } catch (Exception e) {
                            Timber.tag(TAG).e(e, "onComplete: get userID failed: %s", userID);
                        }

                        Timber.tag(TAG).d("onComplete: Authstate changed: %s", userID);
                    }

                }
            });
}

public void sendVerificationEmail(){
    FirebaseAuth auth = FirebaseAuth.getInstance();
    FirebaseUser user = auth.getCurrentUser();

    if(user != null){
        user.sendEmailVerification()
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if(task.isSuccessful()){
                            Timber.tag(TAG).d("onComplete: Email sent");
                        }else{
                            Timber.tag(TAG).d("onComplete: Email failed");
                            Toast.makeText(mContext, "Couldn't send verification email.", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
}

这就是我调用方法的方式:

email = mEmail.getText().toString();
username = mUsername.getText().toString();
password = mPassword.getText().toString();
firebaseMethods.registerNewEmail(email, password, username);

这些字段都已填满,但是我看不出为什么getEmail()为空。

1 个答案:

答案 0 :(得分:0)

如果我们看看Firebase文档:https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseAuth.html#getCurrentUser(),我们会看到以下内容:

  

返回当前登录的FirebaseUser;如果没有,则返回null。

     

使用getCurrentUser()!= null检查用户是否登录。

因此,我们可以说在您的代码中该用户不存在或尚未登录。因此,请确保您的用户实际上已经登录。