【问题标题】:Set different References to FirebaseRecyclerAdapter android设置对 FirebaseRecyclerAdapter android 的不同引用
【发布时间】:2023-04-09 17:23:01
【问题描述】:

我有这个数据库结构:

当时我有以下代码:

final DatabaseReference messagesRef = mFirebaseDatabaseReference.child("users/").child(firebase_user_uid + "/").child("chats/");
    messagesRef.keepSynced(true);

    FirebaseRecyclerOptions<ChatListMediation> options = new FirebaseRecyclerOptions.Builder<ChatListMediation>().setQuery(messagesRef, parser).build();

    mFirebaseAdapter = new FirebaseRecyclerAdapter<ChatListMediation, MessageViewHolder>(options) {

        @Override
        public MessageViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
            final int layout = viewType == TYPE_INACTIVE ? R.layout.item_chatlist : R.layout.item_chatlist_selected;
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(layout, viewGroup, false);
            return new MessageViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(final MessageViewHolder viewHolder, int position, final ChatListMediation chatListMediation) {
            viewHolder.chatKey = chatListMediation.getChatkey();

        }
    };  

所以,我们开始吧。我为以下FirebasedatabseReferenceusers/firebase_user_uid/chats 设置的 FirebaseRecyclerAdapter。所以在这里我得到了一个聊天键列表。但现在我需要一些进入FirebaseDatabseReference“chats/chat_key”并在那里阅读信息的人。例如 "chattype" 或 "createdTime" 。起初,我有很多 addValueEventListener 用于我想要的不同的东西,但我认为那不是最好的最快的方法。也许第二个FirebaseReycyclerAdapter?或者我可以在运行时切换FirebaseRecyclerAdapter 的 FirebaseDatabseReference 吗?我不知道该解决谁。
我希望你能理解我的问题并能帮助我。如果您有任何问题,请告诉我。
提前致谢。

【问题讨论】:

    标签: android firebase firebase-realtime-database android-recyclerview firebaseui


    【解决方案1】:

    要解决这个问题,请更改这行代码:

    DatabaseReference messagesRef = mFirebaseDatabaseReference.child("users/").child(firebase_user_uid + "/").child("chats/");
    

    DatabaseReference messagesRef = mFirebaseDatabaseReference
        .child("users")
        .child(firebase_user_uid)
        .child("chats");
    

    如您所见,我已经删除了/,否则您的引用将包含双重/。您也可以像这样以简短的方式获得参考:

    DatabaseReference messagesRef = mFirebaseDatabaseReference
        .child("users/" + firebase_user_uid + "/chats/");
    

    我还建议您像这样使用Query

    Query query = messagesRef.orderByChild("active").equalsTo(true);
    

    【讨论】:

    • 谢谢。但是我怎样才能从其他参考中获取我想要的数据呢?
    • 还有哪些参考资料?通过此查询,您可以获得特定用户的所有聊天记录。
    • 我想通过 firebaserecycleradapter 获取 ref "chats/chat_key" 信息
    • FirebaseUI 中的 Firebase 适配器仅显示位置的子节点或您将它们绑定到的查询。根本没有使用单个引用显示较低级别后代或其他位置的功能。您需要创建另一个,或者如果需要,可以组合一个。
    • 如何合成一个?你的意思是一个列表两个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    相关资源
    最近更新 更多