如果孩子存在,Firebase会显示

时间:2017-03-09 15:55:40

标签: android firebase firebase-realtime-database android-recyclerview

我正在使用 FirebaseIndexRecyclerAdapter ,我正在尝试为以下用户展示帖子,因此我使用了这些方法,但如果以下用户可以使用帖子ID,则显示帖子:

这是我的json:

"Following" : {
    "ORBBKfZAAUhqI1h7ojQDzYOjgkp1" : { 
       "pypD1SYZkbcYesk09WuMUY1AkTf1": true,
      //I need to show this UID posts only but,
      //When I add here post id it show the post 
      //Ex:"-KduqnVVczZf5uibQiZ-" : true,//Post Shows Up
  },
  "Posts" : {
    "-KduqnVVczZf5uibQiZ-" : {
      "Describe" : "gg",
      "Time" : 14881230655,
      "UID" : "pypD1SYZkbcYesk09WuMUY1AkTf1",
      "Username" : "Jone",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped906285501.jpg?alt=media&token=0c1a3a3d-6e48-4c4e-ba59-f5646bf8965f"
    },
    "-Ke5gJ00CxbjhOuhzLIx" : {
      "Describe" : "hajj",
      "Time" : 1488318465,
      "UID" : "pypD1SYZkbcYesk09WuMUY1AkTf1",
      "Username" : "Dom",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1717103943.jpg?alt=media&token=a85b2488-5ac7-49a7-9ad0-dbf4e6f29389"
    },
    "-KeCuiFmUCpN19zwsTsR" : {
      "Describe" : "a",
      "Profile" : "https://lh4.googleusercontent.com/-suB77riNoX8/AAAAAAAAAAI/AAAAAAAAAAA/ADPlhfKMzINn-Ki538Sqf6SRGaXC81-WuQ/s200-c/photo.jpg",
      "Time" : 1488439652,
      "UID" : "z2SNUlLd6mQM8nnlkU2VUws5Ggl2",
      "Username" : "Dom",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1913886685.jpg?alt=media&token=c8ad26b2-8f09-453b-b48a-aad9e4d8b5c3"
    },
    "-KeD2fBUQ09HVMrvAneb" : {
      "Describe" : "ee",
      "Profile" : "https://lh4.googleusercontent.com/-suB77riNoX8/AAAAAAAAAAI/AAAAAAAAAAA/ADPlhfKMzINn-Ki538Sqf6SRGaXC81-WuQ/s200-c/photo.jpg",
      "Time" : 1488441999,
      "UID" : "z2SNUlLd6mQM8nnlkU2VUws5Ggl2",
      "Username" : "Dom",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1904338270.jpg?alt=media&token=d200b7fc-15e7-4dc4-9913-59c377929e9e"
    },
    "-KeDfnMWiB7k_4J3FBgZ" : {
      "Describe" : "f12g",
      "Time" : 1488452517,
      "UID" : "ORBBKfZAAUhqI1h7ojQDzYOjgkp1" 
      "Username" : "Young",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1872832638.jpg?alt=media&token=80239844-a872-47e2-9689-92d368dd9452"
    },
    "-KeDfrw4inUQFtIDXJHp" : {
      "Describe" : "fg",
      "Time" : 1488452536,
      "UID" : "ORBBKfZAAUhqI1h7ojQDzYOjgkp1" 
      "Username" : "Young",
      "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1872832638.jpg?alt=media&token=80239844-a872-47e2-9689-92d368dd9452"
    },

  }
}

以下是我使用的方法:

    mAuth = FirebaseAuth.getInstance();
    mCurrentUser = mAuth.getCurrentUser();
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Posts");
    mDatabaseFriends = FirebaseDatabase.getInstance().getReference().child("Following").child(mCurrentUser.getUid());

   FirebaseIndexRecyclerAdapter<Getting_Posts,PostViewHolder> firebaseIndexRecyclerAdapter = new FirebaseIndexRecyclerAdapter<Getting_Posts, PostViewHolder>(
            Getting_Posts.class,R.layout.post_card_design,PostViewHolder.class,mDatabaseFriends,mDatabase)
    {
        @Override
        protected void populateViewHolder(PostViewHolder viewHolder, Getting_Posts model, int position) {}};

1 个答案:

答案 0 :(得分:1)

要检查五个引用是否包含子级,您应该在回调中使用dataSnapshot.exists()dataSnapshot.getChildrenCount() > 0并使用给定的DataSnapshot

如果你想要检索id等于关注者的帖子,你应该修改你的数据库,为pur Posts表添加一个额外的级别,其中帖子将基于用户id在一起:

"Posts": {
"USER_ID_1": {
  "post_id_1": {
    "Describe": "gg",
    "Time": 14881230655,
    "UID": "pypD1SYZkbcYesk09WuMUY1AkTf1",
    "Username": "Jone"
  },
  "post_id_2": {
    "Describe": "gg",
    "Time": 14881230655,
    "UID": "pypD1SYZkbcYesk09WuMUY1AkTf1",
    "Username": "Jone"
  }
},
"USER_ID_2": {
  "post_id_3": {
    "Describe": "gg",
    "Time": 14881230655,
    "UID": "pypD1SYZkbcYesk09WuMUY1AkTf1",
    "Username": "Jone"
  },
  "post_id_4": {
    "Describe": "gg",
    "Time": 14881230655,
    "UID": "pypD1SYZkbcYesk09WuMUY1AkTf1",
    "Username": "Jone"
  }
}

要迭代查找每个用户内部的所有帖子(就在您关注我向您发布的新数据模型),您可以检索它们:

        List<Getting_Posts> totalPosts = new ArrayList<>();
        //Check if the dataSnapshot have childrens
        if (dataSnapshot.hasChildren()){
           //This for iterate for each USER_ID from your database
           for (DataSnapshot users : dataSnapshot.getChildren()) {
              //This second iterate for each post for each user
              for (DataSnapshot posts : users.getChildren()) {
                 totalPosts.add(dataSnapshot.getValue(Getting_Posts.class));
              }
           }
        }

        return totalPosts;

您可以在下一篇文章或官方文档中阅读有关此内容的更多信息: https://www.airpair.com/firebase/posts/structuring-your-firebase-data

https://firebase.google.com/docs/database/web/structure-data?hl=en-419