2 回答
TA贡献1802条经验 获得超5个赞
如果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"
}
}
}
然后你可以按以下顺序获得结果Month:
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
}
}
...
TA贡献1783条经验 获得超4个赞
我放弃了使用 Firebase 查询对数据进行排序,我确信我的代码没有任何问题,无论如何,我决定使用 Collections.sort 将数据添加到 arrayList“之后”对其进行排序,并且它有效。谢谢
PS,如果有人知道为什么我的 firebase 查询不起作用,我仍然想知道原因:S
这是代码,以防其他人需要对 arrayList 中的数据进行排序
//sort the item to show months in ascending order
Collections.sort(items, new Comparator<PastMonthsWeightStats>(){
@Override
public int compare(PastMonthsWeightStats obj1, PastMonthsWeightStats obj2) {
// ## Ascending order
// return obj1.firstName.compareToIgnoreCase(obj2.firstName); // To compare string values
//return Float.valueOf(obj1.getMonthNumber()).compareTo(Float.valueOf(obj2.getMonthNumber())); // To compare integer values
// ## Descending order
// return obj2.firstName.compareToIgnoreCase(obj1.firstName); // To compare string values
return Integer.valueOf(obj2.getMonthNumber()).compareTo(Integer.valueOf(obj1.getMonthNumber())); // To compare integer values
}
});
添加回答
举报