从Firebase中的嵌套节点获取数据

时间:2017-02-23 06:52:56

标签: android firebase firebase-realtime-database

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

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

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

你能帮我解决吗?

任何帮助都会深深感激。

  

请查看下面的屏幕截图。

Database image

4 个答案:

答案 0 :(得分: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) {

                }
            });

答案 1 :(得分:1)

首先,您需要阅读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,以便在任何地方重复使用。

<强>更新

对于Fitch数据您必须使用Firebase adapterexample

答案 2 :(得分:0)

尝试这样的事情

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

其中UID是特定帖子节点的关键。

PS:这会返回类似于promise的内容,您需要为其附加一个侦听器。 (因为这是实时的)

答案 3 :(得分:0)

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

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) {

        }