Android,Firebase如何从数据库中获取布尔数据并对其进行计数

时间:2018-04-30 01:16:44

标签: android firebase firebase-realtime-database

我只想从我的firebase数据库中获取布尔数据,然后计算其中有多少布尔数据。

这是我数据库中的json树。

       "user_study_condition" : {
"1lYNWnabn7a6mj9cPOcayHOGUjx2" : {
  "algorithm" : {
    "bubble" : true,
    "insert" : false,
    "name" : "알고리즘"
  },
  "data_structure" : {
    "name" : "자료구조",
    "queue" : true,
    "stack" : false
  }
}

}

我想只计算真实数据。在这棵树中,我将计算2个真实数据。然后添加到列表中。我已经知道如何从数据库中检索数据,如'addSingleValueListener ... addValueListener ..'

但我不知道如何计算布尔数据量。

我必须动态计算布尔数据。因为主题将动态创建。和布尔数据将经常更改。所以我想知道解决方案。

感谢您的回复。

2 个答案:

答案 0 :(得分:3)

您可以使用equalTo

来完成此操作
myRef.orderByChild(childName).equalTo(true);

然后在你的听众身上你可以通过

获得计数
dataSnapShot.getChildrenCount()

希望这有帮助

修改

尝试使用动态密钥。首先是获得你的基础。实施例

myRef = ref.child("1lYNWnabn7a6mj9cPOcayHOGUjx2")

然后将侦听器添加到此处然后在侦听器内执行此操作

for (DataSnapshot snapShot: dataSnapshot.getChildren()) {
   Map<String, Object> mp= (Map<String, Object>) snapShot.getValue();

   //First is to check if it contains true
   if(mp.containsValue(true)){
     Iterator it = mp.entrySet().iterator();
     while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();

        //If object is a boolean check if it is true
        if(pair.getValue() instanceof Boolean){
           if(pair.getValue()){
              //This mean that we have 1 true
              ctrTrue++;

              //This refers to the child reference
              //For example "1lYNWnabn7a6mj9cPOcayHOGUjx2/algorithm"
              DatabaseReference itemRef = myRef.child(pair.getKey())
           }
        }
        it.remove();
     }
   }
}

答案 1 :(得分:2)

如果你确定对象中唯一的布尔字段是bubbleinsertqueuestack,你可以创建一个布尔列表并添加这些字段的价值。然后,您可以执行以下操作:

<强>爪哇

List<Boolean> booleanFields = new ArrayList<>();
booleanFields.add(algorithm.isBubble());
booleanFields.add(algorithm.isInsert());
booleanFields.add(dataStructure.isQueue());
booleanFields.add(dataStructure.isStack());    

int trueCount = 0;
for (boolean field : booleanFields)
    if (item) trueCount++;

<强>科特林

val booleanFields = ArrayList<Boolean>()
booleanFields.add(algorithm.isBubble)
booleanFields.add(algorithm.isInsert)
booleanFields.add(dataStructure.isQueue)
booleanFields.add(dataStructure.isStack)

val count = booleanFields.count { it }