匿名类中的执行顺序

时间:2018-05-19 12:25:32

标签: java android firebase firebase-realtime-database

我正在尝试通过先读取当前的喜欢数量来更新喜欢,然后将值递增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());
  }
});

1 个答案:

答案 0 :(得分:1)

要解决此问题,您肯定需要使用Firebase Transactions

  

处理可能因并发修改而损坏的数据(例如增量计数器)时,您可以使用事务操作。

为实现这一目标,请使用我在 post 中的回答,其中我已解释了如何在Firebase Realtime数据库中增加值以及如何将其读回。

您还可以查看此 post ,以便更好地了解asynchronous方法。