Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase-统计列表中某个值出现的总次数_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android Firebase-统计列表中某个值出现的总次数

Android Firebase-统计列表中某个值出现的总次数,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,在我的项目中,用户可以创建一个列表并用项目填充该列表。然后,他们可以为每个列表项设置单个类别。有三个类别(是、否和未知) 我正试图得到每个类别的总数。例如,用户列表包含20项-->20项中有10项被归类为“是”,5项为“否”,最后5项为“未知” 这就是我所处的位置: ListDetailsActivity: listItemsReference = FirebaseDatabase.getInstance().getReference() .child("list-items")

在我的项目中,用户可以创建一个列表并用项目填充该列表。然后,他们可以为每个列表项设置单个类别。有三个类别(是、否和未知)

我正试图得到每个类别的总数。例如,用户列表包含20项-->20项中有10项被归类为“是”,5项为“否”,最后5项为“未知”

这就是我所处的位置:

ListDetailsActivity

listItemsReference = FirebaseDatabase.getInstance().getReference()
        .child("list-items")
        .child(listId);

    ...

listItemsReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot child : dataSnapshot.getChildren()){
            Legislator legislator = child.getValue(Legislator.class);
            if (legislator.getCategory() != null){
                Log.d("category", legislator.getCategory());
            }

        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "onCancelled", databaseError.toException());
    }
});
日志将返回以下内容:

09-23 00:23:36.995 7359-7359/com.example.me.firebasesimplelist2 D/category: Yes
09-23 00:23:36.995 7359-7359/com.example.me.firebasesimplelist2 D/category: Yes
09-23 00:23:36.995 7359-7359/com.example.me.firebasesimplelist2 D/category: No
我将如何获得每个类别的总数?其中,“Yes”将返回2,“No”将返回1

下面是JSON的一部分,如果它有帮助的话:

{
  "-KSKFE4MIqJOVwHI7EXW" : {
    "smithJ" : {
      "category" : "Yes",
      "categorySet" : true,
      "name" : "John Smith",
    },
    "bobB" : {
      "category" : "Yes",
      "categorySet" : true,
      "name" : "Billy Bob",
    },
    "jonesS" : {
      "category" : "No",
      "categorySet" : true,
      "name" : "Susy Jones",
    }
  }
}

我是不是让事情变得更复杂了?我觉得我想得太多了…

首先,通过转到您的
onCreate
方法或
onCreateView
(如果您使用的是片段)并添加以下内容,转到您的对象列表的父对象(在您的示例中为“
-KSKFE4MIqJOVwHI7EXW
”):

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(yourParent);
并且,为每个类别添加一个
int

int yes;
int no;
int unknown;
现在,添加一个
ValueEventListener

ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
onDataChange
内部,您需要在
dataSnapshot
的每个子项上设置一个
foreach
循环:

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
   for(DataSnapshot snapShot:dataSnapshot.getChildren(){
       // Go to the next step
     }
}
现在,将其添加到我们制作的
foreach
循环中,查看它是“是”、“否”还是“未知”:

switch(snapShot.child("category").getValue(String.class)){ //This statement is seeing what "category" is.
  case "Yes":
    ++yes; //This is the "yes" int we made earlier; ++ increments 1.
    break;
  case "No":
    ++no; //This is the "no" int we made earlier; ++ increments 1.
    break;
  case "Unknown":
    ++unknown; //This is the "no" int we made earlier; ++ increments 1.
    break;
}

最后,所有的
int
s都将有未知、是和否的数字。

例如,您想计算有多少个“是”?这是正确的。最后,我想向用户展示列表顶部显示类别计数的信息。例如,“您有标记为“是”的项的###和标记为“否”的项的###等等。我将发布一个答案什么是“
-KSKFE4MIqJOVwHI7EXW
”的父项?父项是“列表项”--如果有帮助,我还将添加如何定义列表项引用。