如何从firebase中按排序顺序检索数据,其中排序字段是名称

时间:2017-06-28 13:00:59

标签: android firebase firebase-realtime-database

passbuddy-2af92
    Passwords
        pass1
            age: 20
            name: "Shantanu"
        pass2
            age: 42
            name: "Rinku"
        pass3
            age: 51
            name: "Swarup"

这是我的firebase数据库。我想根据名称按排序顺序检索数据:ie

{pass3={name=Swarup, age=51}, pass1={name=Shantanu, age=20}, pass2={name=Rinku, age=42}}

或以相反的顺序

我已尝试过这些代码行来完成所需的任务,但它们似乎无法正常工作。

DatabaseReference databasePasswords = FirebaseDatabase.getInstance().getReference().child("Passwords");
    databasePasswords.orderByChild("name").startAt("S").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.i(TAG, "onDataChange: DATA : " + dataSnapshot.getValue().toString());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Thanx提前帮助你...

2 个答案:

答案 0 :(得分:0)

对Firebase数据库执行查询时,可能会有多个结果。当您使用ValueEventListener时,所有匹配的节点将在一个DataSnapshot中传递给您。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。您的代码需要处理此列表,以便维护匹配节点的顺序:

DatabaseReference databasePasswords = FirebaseDatabase.getInstance().getReference().child("Passwords");
databasePasswords.orderByChild("name").startAt("S").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            Log.i(TAG, "onDataChange: Key : " + childSnapshot.getKey()+, Name : "+childSnapshot.child("name").getValue());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
});

答案 1 :(得分:0)

我正在研究分类,过滤和限制部分Firebase数据。这是一个很好的参考页面:

https://firebase.google.com/docs/firestore/query-data/order-limit-data