java - 尝试在空对象引用上调用虚拟方法“boolean java.lang.String.equals(java.lang.Object)”以读取登录页面的数据
问题描述
我的代码有问题,从数据库调用有问题。
private void isUser() {
final String userEnteredUsername=regUsername.getEditText().getText().toString().trim();
final String userEnteredPassword=regPassword.getEditText().getText().toString().trim();
DatabaseReference reference=FirebaseDatabase.getInstance().getReference("users");
Query checkUser=reference.orderByChild("username").equalTo(userEnteredUsername);
checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.exists()){
regUsername.setError(null);
regUsername.setErrorEnabled(false);
String passwordFromDb=snapshot.child(userEnteredUsername).child("password").getValue(String.class);
if(passwordFromDb.equals(userEnteredPassword)){
regPassword.setError(null);
regPassword.setErrorEnabled(false);
String nameFromDb=snapshot.child(userEnteredUsername).child("name").getValue(String.class);
String usernameFromDb=snapshot.child(userEnteredUsername).child("username").getValue(String.class);
String phoneNoFromDb=snapshot.child(userEnteredUsername).child("phoneNo").getValue(String.class);
String emailFromDb=snapshot.child(userEnteredUsername).child("email").getValue(String.class);
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
Toast.makeText(getApplicationContext(),"Welcome",Toast.LENGTH_SHORT).show();
intent.putExtra("name",nameFromDb);
intent.putExtra("username",usernameFromDb);
intent.putExtra("email",emailFromDb);
intent.putExtra("phoneNo",phoneNoFromDb);
intent.putExtra("password",passwordFromDb);
startActivity(intent);
}
else {
regPassword.setError("Wrong Password");
regPassword.requestFocus();
}
}
else{
regUsername.setError("No such User Exist");
regUsername.requestFocus();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {}
});
}
2020-10-08 11:12:44.273 14309-14309/com.example.auditapp E/AndroidRuntime:致命异常:主进程:com.example.auditapp,PID:14309 java.lang.NullPointerException:尝试调用虚拟方法' boolean java.lang.String.equals(java.lang.Object)' 在 com.google.firebase.database.Query$1 的 com.example.auditapp.SignIn$3.onDataChange(SignIn.java:96) 的空对象引用上.onDataChange(Query.java:179) 在 com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75) 在 com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java :63) 在 com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage (Handler.java:100) 在 android.app 的 android.os.Looper.loop(Looper.java:237)。ActivityThread.main(ActivityThread.java:7860) 位于 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 的 java.lang.reflect.Method.invoke(Native Method) 位于 com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:1075)
解决方案
推荐阅读
- c - 为什么用 0 初始化数组会清除整个缓冲区?
- c# - 如何匹配字符串忽略大小写和重音?
- c# - 如果它为“null”,是否可以使用设置的 TargetNullValue 更新数据绑定源值?
- visual-studio - 有没有办法远程调试部署到虚拟目录的 ASP.net 应用程序?
- cordova - 错误:找不到automationName“Appium”和platformName“Android”的驱动程序
- python - 使用 keras 的图像分类预测不同类别的相同输出
- sql - 使用不在连接中的表中的数据时的 CASE
- java - 有没有办法在使用 Pi 相机计数对象时减少值?
- powerapps - PowerApps IF OR 日期 < Today()+15 的公式
- azure - 确定是否已在 Azure 服务总线主题中读取消息