Firebase获取孩子的孩子的参考

时间:2017-09-26 14:42:58

标签: java android firebase firebase-realtime-database

enter image description here

正如您所看到的每个帖子都有不同的 ID (发布的用户ID)我试图获取此孩子 fx3RqooRMOVRaQHGas4OWQnFK593 的引用,例如数据库引用将是这样的:

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Posts").child("fx3RqooRMOVRaQHGas4OWQnFK593");

但我想要的是为每个帖子ID动态获取该引用。

3 个答案:

答案 0 :(得分:0)

要实现此目的,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postsRef = rootRef.child("Posts");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String key = ds.getKey();
            Log.d("TAG", key);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
postsRef.addListenerForSingleValueEvent(eventListener);

输出将是所有这些键。

答案 1 :(得分:0)

FirebaseDatabase.getInstance()
            .getReference()
            .child("Posts")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {


                        for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                            String key = snapshot.getKey(); // key here
                            Object value = snapshot.getValue(); // value here
                        }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

答案 2 :(得分:0)

你有两个选择。

  1. 如果你想下载一个帖子,那么你必须使用你的自定义postId。你不能使用pushId()。这样您就可以知道要下载哪个帖子并进行展示。
  2. 如何制作自定义ID

    FirebaseDatabase.getInstance().getReference().child("Posts")
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                       HashMap<String, Object> post = (HashMap<String, Object>) dataSnapshot.getValue();
                       total= post.size();
    
                    }
          }
    

    然后创建自定义ID

    FirebaseDatabase.getInstance().getReference().child("Posts").child("post"+total).setValue(YourValue);
    

    选项2.

    只需从帖子节点下载所有帖子,因为你必须...

    FirebaseDatabase.getInstance().getReference().child("Posts")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                            //here is your every post 
                            String key = snapshot.getKey(); 
                            Object value = snapshot.getValue();
                        }
                }
    
                @Override
                public void onCancelled(DatabaseError databaseError) {
    
                }
            });
    

    加成 如果你想显示特定用户的帖子。 (我假设) 你可以将按键存储在字符串arrylist中的用户对象中。然后一个一个地打电话给他们......

    快乐编码:):)