设置对 FirebaseRecyclerAdapter 的不同引用 android

Set different References to FirebaseRecyclerAdapter android

我有这个数据库结构:

当时我有以下代码:

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();

        }
    };  

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

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

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);