2016-09-12 4 views
0

У меня есть структура данных, как:Firebase orderByChild в android; не может заставить его работать

https://law-apps-44h221543638e.firebaseio.com/apps to promote/0/ >> name:"First App", package:"fra" 
https://law-apps-44h221543638e.firebaseio.com/apps to promote/1/ >> name:"Second App", package:"sca" 
https://law-apps-44h221543638e.firebaseio.com/apps to promote/2/ >> name:"Third App", package:"tha" 

и я запрашиваю его с помощью

Firebase myFirebaseReference = new Firebase("https://law-apps-44h221543638e.firebaseio.com/apps to promote"); 
Query queryRef = myFirebaseReference.orderByChild("name"); 

queryRef.addListenerForSingleValueEvent(new ValueEventListener() { // override methods }) 

Но он возвращает данные в том же порядке, т.е. отсортированный по первому ребенку (1,2,3 и т. Д.) Как я могу запросить его, чтобы он сортировал данные с помощью тега «name» каждого дочернего элемента?

+0

Скорее всего, вы ошиблись в реализации 'ValueEventListener'. Обратите внимание, что мы просто добавили дополнительный образец в документацию, чтобы показать, как перебирать дочерние элементы в вашем 'ValueEventListener': https://firebase.google.com/docs/database/android/retrieve-data#filtering_data –

+0

Да, вы были правильно! Я использовал более старую технику, в которой я находил данные из моих приложений, используя номера своих родителей. Теперь я использовал dataSnapshot.getChildren(). Iterator(), и теперь он работает правильно. Спасибо за подсказку! :) – Usman

+0

Приятно слышать, что вы его исправили. Можете ли вы опубликовать ответ с кодом, если теперь вы петлиете над детьми? Это может быть полезно для разработчиков, которые столкнутся с этой проблемой в будущем. –

ответ

0

Хорошо, поэтому я нашел ответ на этот вопрос, и я пишу его, чтобы другие могли извлечь из этого выгоду. Я использовал более старую технику, в которой я находил данные datasnapshot для своих приложений, используя номера своих родителей, и из-за этого я отлично отменял порядок.

Теперь я использовал dataSnapshot.getChildren(). Iterator(), и теперь он работает правильно. Вот код:

Query queryRef = myFirebaseReference.orderByChild("name"); 

    queryRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

    String name; 
    String my_package; 

    long lengthOfForLoop = dataSnapshot.getChildrenCount(); 
    Iterator<DataSnapshot> child = dataSnapshot.getChildren().iterator(); 
    for (int i = 0; i < lengthOfForLoop; i++) { 
      DataSnapshot next = child.next(); 
      name = next.child("name").getValue(String.class); 
      my_package = next.child("package").getValue(String.class); 
       // do something with this data. 
       } 
     } 
    }); 
} 
Смежные вопросы