Как сделать подобную функцию в Firebase? - PullRequest
0 голосов
/ 10 ноября 2018

Есть приложение в нем посты.Похоже, сделано следующим образом:

postReference = firebaseDatabase.getInstance().getReference().child("Posts");   
holder.likeBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        final DatabaseReference likeReference = postReference.child(listUserId).child("Likes");
        likeReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (!dataSnapshot.hasChild(currentUserId)) {
                    likeReference.child(currentUserId).removeValue();
                } else {
                    likeReference.child(currentUserId).setValue("Like");
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
    }
}

Проблема в том, что после нажатия кнопки запись в базе данных начинает добавляться и удаляться без остановки.Как это исправить?Моя БД:

my_database

1 Ответ

0 голосов
/ 10 ноября 2018

Чтобы решить эту проблему, измените следующую строку кода:

likeReference.addValueEventListener(new ValueEventListener() {}

до

likeReference.addListenerForSingleValueEvent(new ValueEventListener() {}

См. addListenerForSingleValueEvent официальная документация:

Добавить слушателя для одного изменения данных в этом месте.

Использование addValueEventListener означает, что вы постоянно поддерживаете слушателя. Чтобы удалить слушателя, смотрите мой ответ из этой записи .

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