我正在尝试使用 Google Firebase 和 Android Studio 创建登录和注册应用程序。
错误:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.example.cmp6213_2.Login$3.onDataChange(Login.java:79)
at com.google.firebase.database.Query$1.onDataChange(Query.java:191)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
LoginActivity.java
public void checkUser(){
String userEmail = loginUsername.getText().toString().trim();
String userId = userEmail.substring(0, 4);
String userPassword = loginPassword.getText().toString().trim();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("users");
Query checkUserDatabase = reference.orderByChild("email").equalTo(userEmail);
checkUserDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()){
loginUsername.setError(null);
String passwordFromDB = snapshot.child(userId).child("password").getValue(String.class);
if (passwordFromDB.equals(userPassword)) {
loginUsername.setError(null);
Intent intent = new Intent(Login.this, MainActivity.class);
startActivity(intent);
} else {
loginPassword.setError("Invalid");
loginPassword.requestFocus();
}
} else {
loginUsername.setError("User does not exist");
loginUsername.requestFocus();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
感谢您的帮助,感谢您的宝贵时间。
我不知道问题出在哪里以及如何解决它,我将不胜感激任何可以帮助我指导我找到罪魁祸首的人。
控制台错误说变量
passwordFromDB
是null
.
请检查变量是否不是
null
.
if (passwordFromDB.equals(userPassword)) {
loginUsername.setError(null);
Intent intent = new Intent(Login.this, MainActivity.class);
startActivity(intent);
}
else {
loginPassword.setError("Invalid");
loginPassword.requestFocus();
}
希望这对你有帮助。