java - Firebase Android 通过子键获取值

标签 java android firebase firebase-realtime-database

我在 Firebase 中有以下数据库结构:

firebase structure

如果“users”对象中包含键“user2”,我想从“chats”中检索所有对象。 是否可以在不改变Firebase结构的情况下下载所写的数据?

我获取数据的实际代码:

DatabaseReference chatReference = FirebaseDatabase.getInstance().getReference("conversationsNew");
chatReference.orderByChild("users").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.d("TAG", dataSnapshot.getChildrenCount());
                for (DataSnapshot chat : dataSnapshot.getChildren()) {
                    Log.d("TAG", chat.toString());
                    Chat chat = chat.getValue(Chat.class);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

非常感谢。

最佳答案

这很有可能:

DatabaseReference chatReference = FirebaseDatabase.getInstance().getReference("chats");
chatReference.orderByChild("users/user1").equalTo(true).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot chat: dataSnapshot.getChildren()) {
                Log.d("TAG", chat.getKey());
                Chat chat = chat.getValue(Chat.class);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException(); // don't ignore errors
        }
    });

这将打印:

chat1

但是这种方法无法扩展,因为您需要为每个用户添加一个索引。为了防止这种情况,您需要一个更能反射(reflect)用例的数据结构。因此:如果您想显示当前用户所在的聊天列表,您需要精确存储:每个用户的聊天列表。 Alex 的回答展示了存储此类数据的最常见方式。

关于java - Firebase Android 通过子键获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46094514/

相关文章:

java - 匹配两个相同字符之间的字符串

java - "generic array creation"修复时提示操作不安全

android - 自定义安卓?

java - SparseArray 上 putAll 的等效方法

swift - 使用 swift 从 firebase 那里的位置获取帖子

firebase - Flutter + Firebase Cloud Functions - 如何从 HttpsCallableResult 获取数据

java - "this"将其作为参数传递给 RMI 时引用发生变化

android - 在 Android Studio 中使用 github 库

javascript - Firebase 未捕获引用错误 Backbone/Fetch 在 Firebase 集合上调用,忽略。

用于多个屏幕的 Java GUI 全屏