在我的项目中,用户可以创建列表并使用项目填充列表。然后,他们可以为每个列表项设置单个类别。有三个类别(是,否和未知)。
我试图获得每个类别的计数总数。例如,用户的列表包含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
我如何获得每个类别的总数?在哪里,"是"将返回2,"否"会返回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",
}
}
}
我是否比这更复杂?我感觉我已经过度思考了......
答案 0 :(得分:2)
首先关闭对象列表的父级(在您的情况下为“-KSKFE4MIqJOVwHI7EXW
”),方法是转到onCreate
方法或onCreateView
(如果您正在使用片段)并添加:
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
内,您需要在每个foreach
的孩子身上设置一个dataSnapshot
循环:
@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
的数字都是未知,是和否。