Как удалить из Firebase автоматически? - PullRequest
0 голосов
/ 16 апреля 2020

Я написал программу для удаления поста из firebase. Когда currentDate == ссылка ("сообщение"). Child (postKey) .child ("date"), тогда пост должен быть удален. проверка проходит каждый (новая тема) 24 часа Я не могу понять, почему он не получает сообщение

private void deletePostFromFirebase(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            while(true) {
                try {
                    Thread.sleep(1000L*60L*60L*24L);
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
                    Date date = new Date();
                    String newDate = simpleDateFormat.format(date);
                    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Posts");
                    ref.orderByChild("date").equalTo(newDate).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (DataSnapshot itemSnapshot : dataSnapshot.getChildren()) {
                                itemSnapshot.getRef().removeValue();
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                            throw databaseError.toException();
                        }
                    });
                }catch (InterruptedException e){
                    showMessage(e.getMessage());
                }
            }
        }
    }).start();
}

Я думаю, что дата написана в firebase (post.child -> date '30 апр 2020' ) написана на русском языке, и текущая дата, которую я получаю, записана в формате dateD30 'April 30' engli sh. Я думаю, что это проблема. Может кто-нибудь объяснить мне или есть другая проблема.

enter image description here

1 Ответ

0 голосов
/ 16 апреля 2020

Если вы хотите иметь возможность упорядочить / отфильтровать по дате, вам необходимо убедиться, что эти даты хранятся в формате, который можно упорядочить / отфильтровать.

Представление toString(), которое вы используете для дат, не является таким форматом, поскольку его лексикографический / алфавитный порядок сортировки отличается от его хронологического порядка сортировки. Некоторые примеры могут прояснить это:

  • В лексикографическом порядке 30 January идет после 28 February, потому что 3> 2.
  • В лексикографическом порядке January 30 приходит после February 28, потому что J> F.

Правильные форматы для хранения дат для их сортировки / фильтрации:

  • Хранение их в качестве меток времени , то есть количество миллисекунд, прошедших с начала эпохи. Поскольку это числовые значения, их можно сортировать и сравнивать численно, а не лексикографически.
  • Хранить их в строковом формате, где лексикографический порядок совпадает с хронологическим порядком, например: "2020-04-16". Потому что "2020-01-30" <<code>"2020-02-28".

Подробнее об этом см .:

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