gpt4 book ai didi

java - orderByChild 查询不适用于 addListenerForSingleValueEvent Firebase

转载 作者:行者123 更新时间:2023-12-01 23:54:12 24 4
gpt4 key购买 nike

我尝试按子值“月”对数据库进行排序,但 orderByChild 不起作用。当我使用 onChildEventListener 而不是 addListenerForSingleValueEvent 时它可以工作但我不想使用 childEventListener

这是我的数据库

"Stats" : {
"2019" : {
"YxdZZHGy3rW4xdjORfk2i5mFRYG2" : {
"August" : {
"Weight" : {
"Body_Fat" : "29",
"Month" : 8,
"Weight" : "68"
}
},
"October" : {
"Weight" : {
"Body_Fat" : "29",
"Month" : 10,
"Weight" : "67"
}
},
"September" : {
"Weight" : {
"Body_Fat" : "28.5",
"Month" : 9,
"Weight" : "65.5"
}
}
}
}
},

这是java代码

 userStatsDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Query query = userStatsDatabase.child(ds.getKey()).child("Weight").orderByChild("Month").limitToFirst(12);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
pastMonthsBodyFat = Float.parseFloat(map.get("Body_Fat").toString());
pastMonthsWeight = Float.parseFloat(map.get("Weight").toString());

pastWeightList.add(pastMonthsWeight);
pastBodyFatList.add(pastMonthsBodyFat);
Toast.makeText(Stats.this, map.get("Month").toString(), Toast.LENGTH_SHORT).show();
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

Toast 应该按顺序打印月份值 8,9,10,但它正在打印值 8,10,9

最佳答案

如果userStatsDatabase指向此JSON(对于特定用户):

  {
"August" : {
"Weight" : {
"Body_Fat" : "29",
"Month" : 8,
"Weight" : "68"
}
},
"October" : {
"Weight" : {
"Body_Fat" : "29",
"Month" : 10,
"Weight" : "67"
}
},
"September" : {
"Weight" : {
"Body_Fat" : "28.5",
"Month" : 9,
"Weight" : "65.5"
}
}
}

然后您可以通过以下方式获取按顺序排列的结果:

Query query = userStatsDatabase..orderByChild("Weight/Month");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot monthSnapshot: dataSnapshot.getChildren()) {
System.out.println(monthSnapshot.getKey()); // August, September, October
System.out.println(monthSnapshot.child("Weight/Month").getValue(Long.class)); // 8, 9, 10
}
}
...

关于java - orderByChild 查询不适用于 addListenerForSingleValueEvent Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58210960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com