我想获得状态为NOT OK的所有化合物的值,您可以在我上传的图片中看到。我试过这个,但我没有得到价值。请帮我创建我想要实现的正确查询。
mUserCompounds.orderByChild("status").equalTo("NOT OK").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
long compounds_solved = dataSnapshot.getChildrenCount();
String output = String.valueOf(compounds_solved);
Log.d("OUTPUT", "Total not ok " + output);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
long compounds_solved = dataSnapshot.getChildrenCount();
String output = String.valueOf(compounds_solved);
Log.d("OUTPUT", "Total not ok " + output);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我想为compound_solved获得的是4.但是根据我的代码得到的是这个。
答案 0 :(得分:2)
ChildEventListener将为您提供发生事件的子项的数据。因此,当您获得快照上的子项数量时,您实际上获得了属性数量的计数。图像,名称和状态(3)。
改为使用ValueEventListener。
mUserCompounds.orderByChild("status").equalTo("NOT OK").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot.getChildrenCount()); }
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 1 :(得分:1)
根据我的理解,您想知道您拥有多少种具有“不好”状态的化合物。您没有看到4的原因是因为datasnapshot.getChildrenCount引用了传递查询的每个数据快照。氨,氧化钙,一氧化碳,二氢都逐一进入onChild。数据快照是这些结果中的每一个。你每次看到3的原因是因为每个化合物都有3个属性。图像,名称和状态。这就是为什么每次调用datasnapshot.getChildrenCount()时都会看到3。
Firebase目前无法计算''来自查询的结果。你可以通过两种方式实现自己想要的目标。
改为创建一个事件值事件侦听器,它可以是单个也可以不是。没关系
mUserCompounds.orderByChild("status").equalTo("Not ok").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.v("result", String.valueOf(dataSnapshot.getChildrenCount()));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这将允许你计算"有多少化合物状态好或不好
|----status |------ok : 5 |------notok:10
您可以查询数据库的这一部分。每次化合物的状态发生变化时,都会更新数据库的这一部分(递增和递减计数器)。当你想知道有多少化合物具有正常状态时,你可以引用root.child(" status")。child(" Not ok")并添加一个值事件监听器