从firebase获取所有孩子(用户)但是向一个孩子(用户)显示按钮?

问题描述 投票:0回答:2

enter image description here我想在所有用户中只向一个用户显示一个按钮。我尝试了orderByKey(),但它没有奏效!

用户模型有id成员,我尝试使用orderByChild("id")但结果相同!

我甚至尝试过以下技巧!

int times=0; //class varaible

 usersListener = new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot ds, String ss) {
                OnlineUser ou = ds.getValue(OnlineUser.class);
                if (ou == null) return;
                if (times == 0 && myId.equals(ou.id)) {
                    times++;
                    button.setVisibility(View.VISIBLE);
                }
            }
//rest of the code

例如:如果子(用户)列表包含4个成员,我想只向一个人或第一个插入数据的人显示按钮。我不想在用户的模型中使用timeStamp节点。

android firebase firebase-realtime-database
2个回答
1
投票

最初(在xml中)通过将按钮可见性设置为“已消失”然后实现如下代码:

int times=0; //class varaible

usersListener = new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot ds, String ss) {
            OnlineUser ou = ds.getValue(OnlineUser.class);
            if (ou == null) return;
            if (times == 0 && myId.equals(ou.id)) {
                times++;
                button.setVisibility(View.VISIBLE);
            }
        }

无法仅向第一个用户显示按钮。而是按钮对所有用户都可见,因为现在按钮的可见性属性设置为可见。因此,每个子元素/用户都可以看到它。

您缺少再次重置可见性。所以我建议您遵循以下代码:

int times=0; //class varaible

usersListener = new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot ds, String ss) {
            OnlineUser ou = ds.getValue(OnlineUser.class);
            if (ou == null) return;
            if (times == 0 && myId.equals(ou.id)) {
                times++;
                button.setVisibility(View.VISIBLE);
            } else {
                button.setVisibility(View.GONE);
            }
        }
//rest of the code

1
投票

您可能正在寻找的是Firebase Query,它可以让您根据自己的需要找到孩子。看看这里的文档:

https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query

看看addListenerForSingleValueEvent方法。

© www.soinside.com 2019 - 2024. All rights reserved.