I am trying to make simple like and unlike system but when I press the like button it just goes up I can not unlike,the counter doesn't go down for example if I have 5 likes and I unlike the value stays at 5. I am new to Firebase Android programming and I don't know how to implement this properly I hope someone can help me.
Here is my code, I can post the whole thing if this is not the correct one.
private void setUpVote(final ViewHolder holder) {
final DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
final String userId = holder.post.getUser_id();
final String postId = holder.post.getPost_id();
holder.mUpVote.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
reference.child("up_votes").child(holder.currentUserID).child(holder.post.getPost_id()).setValue("true");
reference.child("posts").child(holder.post.getPost_id()).child("up_votes").child(holder.currentUserID).setValue("true");
getUpVote(holder);
holder.mDownVote.setEnabled(false);
setUserPoints(userId, holder);
setPostPoints(postId, holder);
}
@Override
public void unLiked(LikeButton likeButton) {
}
});
}
private void getUpVote(final ViewHolder holder) {
String postID = holder.post.getPost_id();
final DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
DatabaseReference newReference = reference.child("posts").child(postID).child("up_votes");
newReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
if (dataSnapshot.hasChild(holder.currentUserID)) {
holder.upVotedByCurrentUser = true;
setState(holder);
} else {
holder.upVotedByCurrentUser = false;
}
long numUpVotes = dataSnapshot.getChildrenCount();
holder.mCountUpVote.setText(String.valueOf(numUpVotes));
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
private void setDownVote(final ViewHolder holder) {
final DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
final String postId = holder.post.getPost_id();
holder.mDownVote.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
reference.child("down_votes").child(holder.currentUserID).child(holder.post.getPost_id()).setValue("true");
reference.child("posts").child(holder.post.getPost_id()).child("down_votes").child(holder.currentUserID).setValue("true");
getDownVote(holder);
holder.mUpVote.setEnabled(false);
setPostPoints(postId, holder);
}
@Override
public void unLiked(LikeButton likeButton) {
}
});
}
private void getDownVote(final ViewHolder holder) {
String postID = holder.post.getPost_id();
final DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
DatabaseReference newReference = reference.child("posts").child(postID).child("down_votes");
newReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
if (dataSnapshot.hasChild(holder.currentUserID)) {
holder.downVotedByCurrentUser = true;
setState(holder);
} else {
holder.downVotedByCurrentUser = false;
}
long numDownVotes = dataSnapshot.getChildrenCount();
holder.mCountDownVote.setText(String.valueOf(numDownVotes));
}
I hope someone can help me!