firebase - 查询数据库有对象但getValue()会返回null
问题描述
我将每个唯一值的用户保存到实时火力库中,以在此链接图像上显示:
我想通过电子邮件获取用户,所以我尝试这样做:
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 即使电子邮件存在。
我想知道有什么问题吗?
解决方案
编辑:
如果您不想传递 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(),即使在日志中,也可以避免空指针异常。
推荐阅读
- windows - 如何对 Windows exe 文件进行二进制分析?
- kotlin - 首次运行时未定义迭代器值
- authorization - 为用户提供集中式身份验证服务器或每个微服务一个数据库?
- flutter - 在 google_maps_flutter 中获取相机当前位置的问题
- python - 'str' 对象没有使用 widget_tweaks 的属性 'field'
- visual-studio - 如何访问 Visual Studio 代码片段中的类名?
- java - 为什么@Valid 不起作用
- ios - 如何通过 NavigationLink 将 ForEach 数组索引传递到另一个 ForEach 而不会崩溃?
- android - 如何在 MVVM android 应用程序中使用存储库模式和实时数据正确排序列表?
- meteor - Fomantic UI - TypeError: $(...).toast 不是一个函数