【发布时间】:2020-01-15 02:39:28
【问题描述】:
您好,我只想匹配 2 个字段,如果它们匹配我想将其中 1 个发送到 firebase。这是用于更改密码。但是我收到错误,它立即进入 else 语句:“出了点问题,密码没有被更改”。无法理解为什么。
现在如果 2 个密码不匹配,我会收到消息:两个字段都匹配 这部分是对的
当 2 场比赛出现问题时:这就是 firebase 的 public void oncomplete 的 else 语句。如果任务成功,它只是跳过,我不明白为什么。
public void changePassword(){
String userPasswordNew = newPassword.getText().toString(); // get pw
String userPassword2New = newPassword2.getText().toString();
if (userPasswordNew.equals(userPassword2New)){
if(userPasswordNew.equals("") || userPassword2New.equals("")){
Toast.makeText(ProfilePasswordUpdateActivity.this,"Fields can not be empty", Toast.LENGTH_SHORT).show();
}
else {
firebaseUser.updatePassword(userPasswordNew).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(ProfilePasswordUpdateActivity.this,"Password changed",Toast.LENGTH_SHORT).show();
finish();
}else{
Toast.makeText(ProfilePasswordUpdateActivity.this,"Something went wrong, password did not get changed",Toast.LENGTH_LONG).show();
}
}
});
}
}
else{
Toast.makeText(ProfilePasswordUpdateActivity.this,"Both fields much match in order to change password",Toast.LENGTH_LONG).show();
}
}
输入的 xml 绑定
newPassword = findViewById(R.id.EditText_new_password);
newPassword2 = findViewById(R.id.EditText_new_password2);
错误
2020-01-15 08:57:44.007 11071-11071/com.example.examapplikation E/AndroidRuntime: FATAL EXCEPTION: main 进程:com.example.examapplikation,PID:11071 java.lang.NullPointerException:尝试在空对象上调用虚拟方法“com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseUser.reauthenticate(com.google.firebase.auth.AuthCredential)”参考 在 com.example.examapplikation.ProfilePasswordUpdateActivity.changePassword(ProfilePasswordUpdateActivity.java:66) 在 com.example.examapplikation.ProfilePasswordUpdateActivity$1.onClick(ProfilePasswordUpdateActivity.java:50) 在 android.view.View.performClick(View.java:6597) 在 android.view.View.performClickInternal(View.java:6574) 在 android.view.View.access$3100(View.java:778) 在 android.view.View$PerformClick.run(View.java:25885) 在 android.os.Handler.handleCallback(Handler.java:873) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
【问题讨论】:
-
我的猜测是它抛出了 FirebaseAuthRecentLoginRequiredException,您能否添加您获得的堆栈跟踪或确认这是问题所在?如果是这种情况,我会解释一个简单的解决方法。
-
如何添加这个?堆栈跟踪
-
实际上它在我添加第二个 if 语句之前就起作用了,我还检查字段是否为空,而不仅仅是两个输入是否相等。但是,如果某些内容为空但在两个字段相等时成功更改密码,则会崩溃。但是现在它直接进入到 firebase 的 changepassword 函数中的 else 语句。
-
抱歉,这还不够,尝试编辑问题并完全添加它,或者只是搜索其中是否出现 FirebaseAuthRecentLoginRequiredException。从你所说的听起来这将是问题,但我更愿意在写答案之前确定,所以请检查
-
但是我创建的 if 语句看起来如何。它是正确的还是我在其中犯了一些逻辑错误?
标签: java android firebase firebase-realtime-database logic