Android Firebase OrderBy

时间:2017-02-13 02:35:18

标签: android firebase firebase-realtime-database

我很难弄清楚如何查询我的Firebase数据库。这是它的样子。

Firebase Database

这是我的代码:

//RETRIEVE
    public ArrayList<Spacecraft> retrieve()
    {

        String myUserId = acct.getId();

        //db.addChildEventListener(new ChildEventListener() {
        db.child("/users/uid").equals(myUserId)
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                //fetchData(dataSnapshot);
                fetchData(dataSnapshot);
                adapter.notifyDataSetChanged();
            }
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                fetchData(dataSnapshot);
                adapter.notifyDataSetChanged();
            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
        return spacecrafts;
    }

因此db.addChildEventListener将检索整个数据库。但我想要的只是为uid等于String myUserId的用户检索数据。我希望按级别按升序排序。我已经阅读了文档并观看了视频,但我无法弄清楚。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

Query query = db.child("users").orderByChild("uid").equalTo("myUserId");
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        for (DataSnapshot userSnapshot: snapshot.getChildren()) {
            System.out.println("User "+userSnapshot.child("uid").getValue());
        }
    }
    ...

但是如果您经常通过UID访问数据,那么您将重组数据库以将所有用户存储在他们自己的UID下:

users
  myUserId
    Level: 2
    NumCorrect: 8

然后您可以使用以下内容读取数据:

db.child("users/myUserId").addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot snapshot) {
        fetchData(dataSnapshot);
    }

有关Firebase查询的详情,请参阅Firebase documentation on sorting and filtering data。由于您是NoSQL新手,我还建议您阅读NoSQL data modeling并查看Firebase for SQL developers

答案 1 :(得分:0)

您可以反转阵列列表

    ArrayList<UserModel> user_list = new ArrayList<>();       

 for (DataSnapshot snapshot :dataSnapshot.getChildren()) {

                UserModel userModel = snapshot.getValue(UserModel.class);

                user_list.add(userModel);
                Collections.reverse(user_list);

            }