2017-02-28 66 views
0

我有一个问题将孩子“喜欢”的值传递给子“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) { 

    } 
}); 

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

+0

哪些数据'mDatabaseRefLike'和'mDatabaseRefPost'指向? – koceeng

+0

@koceeng'mDatabaseRefLike'指向子项“like”,而'mDatabaseRefPost'指向子项“post”。 –

回答

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); 
    } 
    ... 
}); 

希望这有助于。

注:

对不起它需要我长时间理解你的代码。首先,我认为你的代码只是简单的事情更复杂。但是当我试图解决问题时,这实际上是一个好习惯。伟大的工作:)

+1

谢谢先生!你的答案解决了这个问题,虽然我得到了另一个bug,如果用户喜欢另一个帖子,这个值将会是“喜欢”的孩子节点的数量。但是,这将在另一个线程(问题)我想。再次感谢您花时间解决问题! :) –

+1

我错过了分析这部分。知道快照变量包含“ValueEventListener”的目标,所以我想出了定位节点“mPostKey”的解决方案。 (int)dataSnapshot.getChildrenCount();' **解决方案** - 'int likeCounter =(int)dataSnapshot.child(mPostKey).getChildrenCount();' 刚刚在这里评论过,以防万一有人遇到同样的问题。快乐编码! :) –

相关问题