汇总子节点中的所有值,并将sum值传递给另一个子节点

时间:2017-02-28 11:31:24

标签: android firebase firebase-realtime-database

我在传递孩子的价值方面遇到了问题"喜欢"对孩子" post" (节点" postLikes")。这是我的Json树: enter image description here

这里是我的听众,关于事件的按钮:

mDatabaseRefLike.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        UserLike userLike = new UserLike();
        if(mProcessLike){

            if(dataSnapshot.child(mPostKey).hasChild(mUserId)){
                mDatabaseRefLike.child(mPostKey).child(mUserId).removeValue();
                mProcessLike = false;

            }else {
                mDatabaseRefLike.child(mPostKey).child(mUserId).setValue(1);
                userLike.setUserLikes(1);
                mProcessLike = false;

                for (DataSnapshot snap: dataSnapshot.getChildren()) {
                    UserLike getLikes= snap.getValue(UserLike.class);
                    int gLikes = getLikes.getUserLikes();

                    gLikes += gLikes;

                    mDatabaseRefPost.child(mPostKey).child("postLikes").setValue(gLikes);
                }
            }
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

我已经花了好几天时间来解决这个问题,似乎我无法找到解决方案。

1 个答案:

答案 0 :(得分:0)

它应该是这样的:(我已经包含了评论,以便更容易理解)

mDatabaseRefLike.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // sorry I remove userLike object because I don't quite understand what is that for

        // get count data first before it's changed
        int likeCounter = (int) dataSnapshot.getChildrenCount();

        // here we add/remove value in "like/postId/userId"
        // and update likeCounter value
        if(dataSnapshot.child(mPostKey).hasChild(mUserId)) {
            mDatabaseRefLike.child(mPostKey).child(mUserId).removeValue();
            likeCounter--;

        } else {
            mDatabaseRefLike.child(mPostKey).child(mUserId).setValue(true);
            likeCounter++;
        }

        // then we update value in "post/postId/postLikes"
        mDatabaseRefPost.child(mPostKey).child("postLikes").setValue(likeCounter);
    }
    ...
});

希望这有帮助。

  

注意:

     

很抱歉,我需要很长时间才能理解您的代码。首先,我认为你的代码只是简单的事情变得更复杂。但是当我试图解决问题时,它实际上是一个很好的做法。太棒了:))