Порядок исполнения в анонимном классе - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь обновить лайки, сначала прочитав текущее количество лайков, а затем увеличивая значение на 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 голосов
/ 19 мая 2018

Чтобы решить эту проблему, вам обязательно нужно использовать Транзакции Firebase .

При работе с данными, которые могут быть повреждены одновременными изменениями, такими как добавочные счетчики, вы можете использоватьоперация транзакции.

Для этого, пожалуйста, используйте мой ответ из этой записи , в которой я объяснил, как вы можете увеличить значение в Firebase Realtimeбазы данных и как вы можете прочитать ее обратно.

Вы также можете взглянуть на эту запись для лучшего понимания методов asynchronous.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...