Android, Firebase Как получить только логические данные из базы данных и сосчитать их - PullRequest
0 голосов
/ 30 апреля 2018

Я просто хочу получить логические данные из моей базы данных Firebase, а затем посчитать, сколько логических данных в них.

Это мое дерево json в моей базе данных.

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

}

Я хочу считать только достоверные данные. В этом дереве я буду считать 2 достоверных данных. а затем добавить в список. Я уже знаю, как получить данные из базы данных, такие как 'addSingleValueListener ... addValueListener ..'

Но я не знаю, как посчитать логическое количество данных.

Я должен считать логические данные динамически. потому что тема будет создана динамически. и булевы данные будут часто меняться. Поэтому я хотел бы знать решение с учетом этого.

Спасибо за ваш ответ.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Если вы уверены, что единственными логическими полями в вашем объекте являются bubble, insert, queue и stack, вы можете создать логический список и добавить в него значение этих полей. Тогда вы можете сделать следующее:

Java

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 }
0 голосов
/ 30 апреля 2018

Вы можете сделать это, используя equalTo

myRef.orderByChild(childName).equalTo(true);

тогда на вашем слушателе вы можете получить счет на

dataSnapShot.getChildrenCount()

Надеюсь, это поможет

EDIT:

Попробуйте это для динамических клавиш. Первое - это получение вашей базовой референции. Пример

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();
     }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...