我在传递孩子的价值方面遇到了问题"喜欢"对孩子" post" (节点" postLikes")。这是我的Json树:
这里是我的听众,关于事件的按钮:
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 :(得分: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);
}
...
});
希望这有帮助。
注意:
很抱歉,我需要很长时间才能理解您的代码。首先,我认为你的代码只是简单的事情变得更复杂。但是当我试图解决问题时,它实际上是一个很好的做法。太棒了:))