Android Firebase 实时数据库 orderByChild 不工作
Android Firebase Realtime Database orderByChild is not working
我正在尝试使用 orderByChild() 按平均评分对餐厅进行排序,但不是按平均评分对餐厅进行排序而不是返回它们。
这是我的代码:
public void filterQuality(){
DatabaseReference mRatingDb = FirebaseDatabase.getInstance().getReference();
Query topQualityQuery = mRatingDb.orderByChild("Average");
topQualityQuery.addListenerForSingleValueEvent(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Map <String, Double> topQualityMap = new HashMap<>();
List list = new ArrayList();
List list2 = new ArrayList();
for (DataSnapshot ds: dataSnapshot.getChildren()){
topQualityMap.put(ds.getKey(), ds.child("Quality").child("Average").getValue(double.class));
list.add(ds.child("Quality").child("Average").getValue(double.class));
list2.add(ds.getKey());
Log.d("Top Quality", "Value" + topQualityMap);
Log.d("Top Quality", "Value" + list);
Log.d("Top Quality", "Value" + list2);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
这是我从我试图调试的地图和列表中得到的:
值 [3.0]
超值[纽卡斯尔茱莉斯旅馆]
价值{马尔马逊纽卡斯尔=2.0,茱莉斯纽卡斯尔旅馆=3.0}
D/Top 质量:值 [3.0, 2.0]
D/Top 质量:价值 [Jurys Inn Newcastle, Malmaison Newcastle]
D/Top 质量:价值 {Malmaison Newcastle=2.0, Jurys Inn Newcastle=3.0, The County Hotel, Newcastle=4.0}
值 [3.0, 2.0, 4.0]
超值[纽卡斯尔茱莉斯酒店、纽卡斯尔马尔马逊酒店、纽卡斯尔县酒店]
这是我的火力基地:
如果有人知道为什么这不能正常工作,请提供帮助。
谢谢。
您需要指定要订购的值的完整路径。
所以:
DatabaseReference mRatingDb = FirebaseDatabase.getInstance().getReference();
Query topQualityQuery = mRatingDb.orderByChild("Quality/Average");
topQualityQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()){
Log.i("Firebase", ds.getKey()+": "+ ds.child("Quality/Average").getValue(double.class));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException(); // NEVER ignore errors
}
});
我正在尝试使用 orderByChild() 按平均评分对餐厅进行排序,但不是按平均评分对餐厅进行排序而不是返回它们。
这是我的代码:
public void filterQuality(){
DatabaseReference mRatingDb = FirebaseDatabase.getInstance().getReference();
Query topQualityQuery = mRatingDb.orderByChild("Average");
topQualityQuery.addListenerForSingleValueEvent(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Map <String, Double> topQualityMap = new HashMap<>();
List list = new ArrayList();
List list2 = new ArrayList();
for (DataSnapshot ds: dataSnapshot.getChildren()){
topQualityMap.put(ds.getKey(), ds.child("Quality").child("Average").getValue(double.class));
list.add(ds.child("Quality").child("Average").getValue(double.class));
list2.add(ds.getKey());
Log.d("Top Quality", "Value" + topQualityMap);
Log.d("Top Quality", "Value" + list);
Log.d("Top Quality", "Value" + list2);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
这是我从我试图调试的地图和列表中得到的:
值 [3.0]
超值[纽卡斯尔茱莉斯旅馆]
价值{马尔马逊纽卡斯尔=2.0,茱莉斯纽卡斯尔旅馆=3.0}
D/Top 质量:值 [3.0, 2.0]
D/Top 质量:价值 [Jurys Inn Newcastle, Malmaison Newcastle]
D/Top 质量:价值 {Malmaison Newcastle=2.0, Jurys Inn Newcastle=3.0, The County Hotel, Newcastle=4.0}
值 [3.0, 2.0, 4.0]
超值[纽卡斯尔茱莉斯酒店、纽卡斯尔马尔马逊酒店、纽卡斯尔县酒店]
这是我的火力基地:
如果有人知道为什么这不能正常工作,请提供帮助。 谢谢。
您需要指定要订购的值的完整路径。
所以:
DatabaseReference mRatingDb = FirebaseDatabase.getInstance().getReference();
Query topQualityQuery = mRatingDb.orderByChild("Quality/Average");
topQualityQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()){
Log.i("Firebase", ds.getKey()+": "+ ds.child("Quality/Average").getValue(double.class));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException(); // NEVER ignore errors
}
});