Когда пользователю не нравится комментарий, все уведомления этого пользователя удаляются из базы данных, а не только это указанное c уведомление - PullRequest
0 голосов
/ 25 апреля 2020

Написали новый метод удаления уведомлений, которые получает пользователь, если другому пользователю нравится его публикация или комментарии или нравится его комментарий и т. Д. c. Проблема в том, что в базу данных добавляется уведомление о публикации, но когда я, например, «не похож» на комментарий (попадающий в ImageView), а затем, в отличие от него, уведомление с указанным c ID не удаляется из базы данных, и я Я не уверен, почему это так. Все уведомления для этого пользователя удаляются, когда я, например, «не похож» на сообщение, когда нужно удалить только то уведомление, которое было отправлено, потому что мне понравилось сообщение, а остальные нетронуты.

Может кто-нибудь сказать мне, почему это происходит и как это исправить?

enter image description here

PostAdapter

holder.like.setOnClickListener(v -> {
            if (holder.like.getTag().equals("like")) {
                FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid()).child(mFirebaseUser.getUid()).setValue(true);
                addNotification(post.getPublisher(), post.getPostid());
            } else {
                FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid()).child(mFirebaseUser.getUid()).removeValue();
                deleteNotification(post.getPublisher());
            }
        });

private void deleteNotification(String userId) {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Notification notification = snapshot.getValue(Notification.class);
                    if (notification != null) {
                        reference.child(userId).child(notification.getNotificationId()).removeValue();
                    }
                }
            }

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

            }
        });
    }

1 Ответ

1 голос
/ 25 апреля 2020

Как я вижу, когда вы используете функцию addLikeNotification(), тогда notifid назначается последняя push() клавиша. Когда вы пытаетесь удалить любое уведомление, в notifid.

все еще используется последнее значение. Что вы можете сделать, это создать в макете новое поле (для примера TextView), установить для него уведомление и его видимость GONE.

Когда вы пытаетесь удалить значение, сначала назначьте текст из этого поля для notifid, а затем удалите уведомление

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