【问题标题】:Null value in FirebaseUser getEmail()FirebaseUser getEmail() 中的空值
【发布时间】:2019-03-24 10:40:42
【问题描述】:

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

我在这里遇到了一个错误:

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() 为空。

【问题讨论】:

  • @GiovanniTerlingen 你们怎么这么快就找到了这些重复的帖子,我用谷歌搜索了一个小时......让我看看线程thx
  • 呃,我觉得我的和那个不一样。
  • 好吧,user 显然在这里是null,因为user.getEmail() 会引发异常。我提供的链接也有同样的问题,但是您的代码当然可能与另一个不同。

标签: android firebase firebase-authentication


【解决方案1】:

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

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

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

因此,我们可以说在您的代码中用户不存在或未登录(还)。因此,请确保您的用户确实已登录。

【讨论】:

  • 哦,让我试着修复它看看。感谢您的帮助,祝您有美好的一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2020-12-31
  • 2020-12-31
相关资源
最近更新 更多