Android Firebase-统计列表中某个值出现的总次数
在我的项目中,用户可以创建一个列表并用项目填充该列表。然后,他们可以为每个列表项设置单个类别。有三个类别(是、否和未知) 我正试图得到每个类别的总数。例如,用户列表包含20项-->20项中有10项被归类为“是”,5项为“否”,最后5项为“未知” 这就是我所处的位置: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")
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
”的父项?父项是“列表项”--如果有帮助,我还将添加如何定义列表项引用。