我只想从我的firebase数据库中获取布尔数据,然后计算其中有多少布尔数据。
这是我数据库中的json树。
"user_study_condition" : {
"1lYNWnabn7a6mj9cPOcayHOGUjx2" : {
"algorithm" : {
"bubble" : true,
"insert" : false,
"name" : "알고리즘"
},
"data_structure" : {
"name" : "자료구조",
"queue" : true,
"stack" : false
}
}
}
我想只计算真实数据。在这棵树中,我将计算2个真实数据。然后添加到列表中。我已经知道如何从数据库中检索数据,如'addSingleValueListener ... addValueListener ..'
但我不知道如何计算布尔数据量。
我必须动态计算布尔数据。因为主题将动态创建。和布尔数据将经常更改。所以我想知道解决方案。
感谢您的回复。
答案 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)
如果你确定对象中唯一的布尔字段是bubble
,insert
,queue
和stack
,你可以创建一个布尔列表并添加这些字段的价值。然后,您可以执行以下操作:
<强>爪哇强>
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 }