Android Firebase数据库 - 检索数据

问题描述 投票:0回答:2

我正在开发一款使用Firebase数据库的Android应用。

"posts": [
    {
      "post_id": 100,
      "post_kind": "V"
    },
    {
      "post_id": 100,
      "post_kind": "S"
    },
    {
      "post_id": 100,
      "post_kind": "S"
    }
]

我想查询选择post_kind = S的所有帖子

我正在使用查询

databaseReference = firebaseDatabase.getReference("posts");
query = databaseReference.orderByChild("post_kind").equalTo("S");
query.addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
          if (dataSnapshot.exists()) {
                    List<Post> list = new ArrayList<>();
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        Post post = (Post) snapshot.getValue(Post.class);
                        list.add(post);
                    }
                }
            }

     @Override
     public void onCancelled(DatabaseError databaseError) {
           Log.e("DatabaseError", databaseError.toString());
     }
});

但不是结果

android firebase firebase-realtime-database
2个回答
2
投票

试试这个。

databaseReference = firebaseDatabase.getReference("posts");
query = databaseReference.orderByChild("post_kind").equalTo("S");
query.addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
          if (dataSnapshot.exists()) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                   int postId = snapshot.child("post_id").getValue();
                   String postKind = snapshot.child("post_kind").getValue();
                }
            }
        }

      @Override
      public void onCancelled(DatabaseError databaseError) {
          Log.e("DatabaseError", databaseError.toString());
       }
});

0
投票

要解决此问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("posts").orderByChild("post_kind").equalTo("S");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<Post> list = new ArrayList<>();

        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Post post = ds.getValue(Post.class);
            list.add(post);
        }

        Log.d("TAG", list.toString);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("DatabaseError", databaseError.toString());
    }
};
query.addListenerForSingleValueEvent(eventListener);
© www.soinside.com 2019 - 2024. All rights reserved.