I have seen similar questions but none of the answers have helped me so far. I have a user id key and in that for every post, I have a key and I want to implement the like feature for each post but when a try to retrieve the key for a particular post, I get the last key because the onChildAdded method is called for all the children once but I want the key of that particular post.
likeReference = FirebaseDatabase.getInstance().getReference().child("Post").child(uid);
likeReference.keepSynced(true);
likeReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.i("onChildAdded", "Method invoked");
//progressBar.setVisibility(View.VISIBLE);
Post post = dataSnapshot.getValue(Post.class);
String key = dataSnapshot.getKey();
secondReference = likeReference.child(key);
//progressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Like:","Like clicked");
if(post.isLiked()){
post.setLiked(false);
secondReference.child("liked").setValue(post.isLiked());
like.setImageResource(R.drawable.ic_thumb_up);
}else{
post.setLiked(true);
secondReference.child("liked").setValue(post.isLiked());
like.setImageResource(R.drawable.like);
}
}
});