Android База данных Firebase Realtime orderByChild не работает - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь отсортировать рестораны по среднему рейтингу с помощью 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]

Значение [Jurys Inn Newcastle]

Значение {Malmaison Newcastle = 2.0, Jurys Inn Newcastle = 3.0}

D / Высшее качество: значение [3.0, 2.0]

D / Высшее качество: Значение [Jurys Inn Newcastle, Malmaison Newcastle]

D / Высшее качество: Стоимость {Malmaison Newcastle = 2,0, Jurys Inn Newcastle = 3,0, The County Hotel, Ньюкасл = 4,0}

Значение [3,0, 2,0, 4,0]

Значение [Jurys Inn Newcastle, Malmaison Newcastle, The County Hotel, Ньюкасл]

Вот моя база:

Firebase Check my update Firebase

Если кто-то знает, почему это не работает должным образом, пожалуйста, помогите. Спасибо.

1 Ответ

1 голос
/ 16 апреля 2020

Вам необходимо указать полный путь к значению, по которому вы хотите заказать.

Итак:

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
    } 
});
...