【发布时间】:2017-05-09 20:24:05
【问题描述】:
我正在尝试使用 Firebase 在 Android 中执行类似 WHERE 子句的查询。这是我的代码:
Database d = new Database();
mFirebaseInstance = FirebaseDatabase.getInstance();
usersDatabase = mFirebaseInstance.getReference(d.getUsersTable());
Query queryRef = usersDatabase.orderByChild("email").equalTo(email);
queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
user = snapshot.getValue(User.class);
}
@Override public void onCancelled(DatabaseError error) { }
});
// credential matches
if(user.getEmail().equals(email) && user.getPassword().equals(password)){
Intent i = new Intent(getBaseContext(), MainActivity.class);
startActivity(i);
finish();
}else{
Toast.makeText(LoginActivity.this,"Invalid email or password. Please try again.", Toast.LENGTH_SHORT).show();
}
但是,我收到以下错误消息:
FATAL EXCEPTION: main
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.example.LoginActivity$1.onClick(LoginActivity.java:78)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19888)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5273)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
有什么想法吗?提前致谢。
【问题讨论】:
-
检查
user.getEmail()或user.getPassword()是否为空 -
您的
user可能是null -
是的,我尝试使用日志进行跟踪,但没有任何结果。我想知道这是执行 WHERE 子句式查询的正确方法吗?让我上传数据库结构
-
我意识到它甚至没有进入 onDataChanged。有什么想法吗?
标签: android firebase firebase-realtime-database