从firebase中获取所有子级(用户),但将一个按钮显示给一个子级(用户)?

时间:2019-02-14 04:36:28

标签: android firebase firebase-realtime-database

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节点。

2 个答案:

答案 0 :(得分:1)

您可能正在寻找的是Firebase Query,它使您能够根据需要找到孩子。在这里看一下文档:

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

看看addListenerForSingleValueEvent方法。

答案 1 :(得分:1)

首先(在xml中)将按钮的可见性设置为“ gone”,然后实施类似以下的代码:

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