【问题标题】:Fetch data from nested nodes in Firebase从 Firebase 中的嵌套节点获取数据
【发布时间】:2017-07-13 12:44:24
【问题描述】:

我正在使用 Firebase 在 android 中构建我的第一个项目。

我已经构建了一个 Firebase's database,它的主节点为 postmedia 为其子节点,媒体节点可以包含多个特定帖子的值或其中可以有一个值。

所以我想用特定的帖子节点获取媒体子节点值。

你能帮帮我吗?

任何帮助将不胜感激。

请查看下面的截图。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:
    Firebase ref = new Firebase(YOUR_FIREBASE_URL);
                String postNode ="KddShng........";
                ref.child("posts/"+postNode).child("media").addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                            Log.e("!_@@_Key : >",dataSnapshot.getKey()); // you will get key of Media node
                    }
    
                    @Override
                    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
                    }
    
                    @Override
                    public void onChildRemoved(DataSnapshot dataSnapshot) {
    
                    }
    
                    @Override
                    public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
                    }
    
                    @Override
                    public void onCancelled(FirebaseError firebaseError) {
    
                    }
                });
    

    【讨论】:

    • 我也想获取 post 节点,并且在里面我想要媒体节点列表。这会做同样的事情吗?
    • 请也扩展该节点..为其添加新图像..这样我可以得到想法
    【解决方案2】:

    首先您需要阅读 docs 以了解如何从 firebase 检索数据。

    你的数据会是这样的……

    final Firebase ref = new Firebase("URL/posts");
        ref.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
    //u can handle your variables name in GetData class
                    GetData posts = userSnapshot.getValue(GetData.class);
    

    换一种方式..

                    DatabaseReference  databaseReference = FirebaseDatabase.getInstance().getReference().child("posts");
                    String user_id = firebaseAuth.getCurrentUser().getUid();
                   databaseReference.child(user_id).child("media").getValue("user_id").getValue(etc);
    

    您可以将最后一行保存为 String 以便在任何地方重复使用。

    更新:

    要获取数据,您必须使用 Firebase adapterexample

    【讨论】:

    • 我需要单个 getset 数组中特定帖子的帖子数据和媒体子节点数据。如何实现该功能?
    • 能否请您给我发送相同或任何工作示例的 github 链接?
    • 请检查更新。
    【解决方案3】:

    试试这样的

    FirebaseDatabase.getInstance().getReference("posts").child(UID).child("media");

    其中 UID 是特定 post 节点的键。

    PS:这会返回类似于 Promise 的东西,您需要为其附加监听器。 (因为这是实时的)

    【讨论】:

      【解决方案4】:

      如果只想获取一次值,可以这样做。

      FirebaseDatabase.getInstance().getReference("posts").child("your_post_item_id").child("media").addListenerForSingleValueEvent(new ValueEventListener() {
              @Override
              public void onDataChange(DataSnapshot dataSnapshot) {
      
                    for (DataSnapshot children : dataSnapshot.getChildren()) {
                        YourMediaModel mediaItem = children.getValue(YourMediaModel.class);
                        //add you mediaItem to list that you provided
                    }
              }
      
              @Override
              public void onCancelled(DatabaseError databaseError) {
      
              }
      

      【讨论】:

        猜你喜欢
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        相关资源
        最近更新 更多