嗯,抱歉,因为我需要一点帮助。我检查了网络,但似乎还没有找到解决方法。
我在这里遇到错误:
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()为空。
答案 0 :(得分:0)
如果我们看看Firebase文档:https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseAuth.html#getCurrentUser(),我们会看到以下内容:
返回当前登录的FirebaseUser;如果没有,则返回null。
使用getCurrentUser()!= null检查用户是否登录。
因此,我们可以说在您的代码中该用户不存在或尚未登录。因此,请确保您的用户实际上已经登录。