gpt4 book ai didi

firebase - 当查询数据库有对象但 getValue() 将返回 null

转载 作者:行者123 更新时间:2023-12-02 00:55:59 24 4
gpt4 key购买 nike

我将用户的每个唯一值保存到实时 firebase 中,显示在这个链接图片上:

get user according to email - database firebase

我想通过电子邮件获取用户,所以我尝试这样做:

 private void getUserFromRealtimeFirebase(String email) {
mFirebaseDatabase = FirebaseDatabase.getInstance();
mDatabaseReference = mFirebaseDatabase.getReference().child("user");
Query query = mDatabaseReference.orderByChild("email").equalTo(email);

query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.i("TAG", "dataSnapshot value = " + dataSnapshot.getValue().toString());

if (dataSnapshot.exists()) {
Log.d("Tag", "user exists");
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

但即使存在电子邮件,我也总是会收到回调监听器:dataSnapshot: key = user , value = null 。

enter image description here enter image description here

请问这是怎么回事?

最佳答案

编辑:

如果您不想传递 userId,请使用此查询:

mDatabaseReference = mFirebaseDatabase.getReference();
Query query = mDatabaseReference.orderByChild("user/email").equalTo(email);

您缺少用户 ID 级别。您应该将代码更改为:

private void getUserFromRealtimeFirebase(String email, String userId) {
mFirebaseDatabase = FirebaseDatabase.getInstance();
mDatabaseReference = mFirebaseDatabase.getReference().chlid(userId).child("user");
Query query = mDatabaseReference.orderByChild("email").equalTo(email);
...
...
}

顺便说一句,我会考虑将数据结构重新安排为 -newsapp -> users -> {userId} -> {name, image, firebase-token, email....}.

此外,在回调中 - 首先检查 dataSnapshot.exists() 是否存在,然后才使用 getValue(),即使是在日志中,以避免空指针异常。

关于firebase - 当查询数据库有对象但 getValue() 将返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54238965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com