如何从firebase中对返回的数据进行排序?

时间:2018-03-08 17:18:50

标签: android firebase firebase-realtime-database

我想按字母顺序对列表视图中的项目进行排序,我尝试了orderByChild("name"),但我认为它甚至不起作用。不过这是我的代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        DatabaseReference medicinesRef = rootRef.child("Medicines");
        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                for(com.google.firebase.database.DataSnapshot ds : dataSnapshot.getChildren()) {

                    medName = ds.child("name").getValue(String.class);
                    Log.d("TAG", medName);
                    myArrayList.add(medName);
                    ArrayAdapter<String> firebaseAdapter = new ArrayAdapter<String>(MedicineSearch.this, android.R.layout.simple_list_item_1, myArrayList);
                    lv.setAdapter(firebaseAdapter);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };      // populates listview
        medicinesRef.addListenerForSingleValueEvent(eventListener);

        rootRef.keepSynced(true);

1 个答案:

答案 0 :(得分:0)

要对数据进行排序,您需要使用Query,为此,请参阅以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference medicinesRef = rootRef.child("Medicines");
Query query = medicinesRef.orderByChild("name");
query.addListenerForSingleValueEvent(/* ... */);

另一种方法是使用相同的代码并使用以下方式对列表进行排序:

Collections.sort(myArrayList);

但是不要在for循环中创建和使用适配器。将这两行代码移到循环之外,否则最终会在ListView中包含一个项目。