Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Firebase实时数据库orderByChild不工作_Java_Android_Firebase_Firebase Realtime Database_Rating - Fatal编程技术网

Java Android Firebase实时数据库orderByChild不工作

Java Android Firebase实时数据库orderByChild不工作,java,android,firebase,firebase-realtime-database,rating,Java,Android,Firebase,Firebase Realtime Database,Rating,我试图用orderByChild()按平均评级对餐厅进行排序,但不是按平均评级对餐厅进行排序返回,而是没有 这是我的密码: public void filterQuality(){ DatabaseReference mRatingDb = FirebaseDatabase.getInstance().getReference(); Query topQualityQuery = mRatingDb.orderByChild("Average"); topQualit

我试图用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) {

        }
    });

}
public void filterQuality(){
DatabaseReference mRatingDb=FirebaseDatabase.getInstance().getReference();
Query topQualityQuery=mRatingDb.orderByChild(“平均”);
topQualityQuery.addListenerForSingleValueEvent(新的ValueEventListener())
{
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
Map topQualityMap=新的HashMap();
列表=新的ArrayList();
List list2=新的ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
topQualityMap.put(ds.getKey(),ds.child(“质量”).child(“平均”).getValue(double.class));
添加(ds.child(“质量”).child(“平均”).getValue(double.class));
list2.add(ds.getKey());
Log.d(“最高质量”、“价值”+topQualityMap);
Log.d(“最高质量”、“价值”+列表);
Log.d(“最高质量”、“价值”+列表2);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
这是我从尝试调试的映射和列表中得到的:

价值[3.0]

价值[纽卡斯尔朱利斯酒店]

值{Malmaison纽卡斯尔=2.0,Jurys Inn纽卡斯尔=3.0}

D/最高质量:值[3.0,2.0]

D/最高质量:价值[纽卡斯尔马尔迈森纽卡斯尔朱利斯酒店]

D/最高质量:价值{Malmaison纽卡斯尔=2.0,纽卡斯尔朱利斯酒店=3.0,纽卡斯尔郡酒店=4.0}

数值[3.0,2.0,4.0]

价值[纽卡斯尔朱利斯酒店,马尔迈森纽卡斯尔,纽卡斯尔郡酒店]

这是我的firebase:

如果有人知道为什么不能正常工作,请帮助。
谢谢。

您需要指定要订购的值的完整路径

因此:


据我所知,您不能在两个节点下使用orderByChild。@KasımÖzdemir Firebase实时数据库查询只能有一个动态级别,但在这个JSON中就是这样。@FrankvanPuffelen很高兴了解这一点。@KasımÖzdemir感谢您的回复。你能在我的帖子上查看我编辑的更新Firebase吗?它不起作用。我以前试过,但它不起作用。谢谢你的回复。不幸的是,“它不起作用”不是很可行。毫无疑问,这是您需要更改代码以使其工作的一个方面。我添加了更多的代码来展示如何访问数据,这是因为我已经尝试了很多次,我不确定到底出了什么问题。您提供的代码与我的代码相同。您在
mRatingDb.orderByChild(“平均值”)
上订购,我在
mRatingDb.orderByChild(“质量/平均值”)
上订购。非常感谢,它可以工作,但我如何才能按降序订购,以便获得最高评级?
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
    } 
});