我正在尝试通过先读取当前的喜欢数量来更新喜欢,然后将值递增1,但是代码不会按照我预期的顺序执行。我怎么能在获得喜欢的datasnaphot值后立即更新喜欢的内容?
尝试实施喜欢:
viewHolder.like_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
likes = 0;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("posts");
ref.child( getRef(viewHolder.getAdapterPosition()).getKey()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//get the current number of likes on the post
likes = dataSnapshot.child("likes").getValue(Integer.class);
Log.w("likes", "likes is " + likes);
// hasRead = true;
Log.w("status", "is "+ hasRead );
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//add a like to exisitng likes
ref.child(getRef(viewHolder.getAdapterPosition()).getKey().toString()).child("likes").setValue(likes+=1);
Log.w("action", "You've liked post with key "+ getRef(viewHolder.getAdapterPosition()).getKey() + " position is "+ viewHolder.getAdapterPosition());
}
});
答案 0 :(得分:1)
要解决此问题,您肯定需要使用Firebase Transactions。
处理可能因并发修改而损坏的数据(例如增量计数器)时,您可以使用事务操作。
为实现这一目标,请使用我在 post 中的回答,其中我已解释了如何在Firebase Realtime数据库中增加值以及如何将其读回。
您还可以查看此 post ,以便更好地了解asynchronous
方法。