首页 > 解决方案 > 如何自动从 Firebase 中删除?

问题描述

我编写了一个程序来从 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')写的日期是用俄语格式写的,我得到的当前日期是currentDate'30 april 2020'英文格式。我认为这是一个问题。有人可以向我解释一下还是有其他问题。

在此处输入图像描述

标签: javafirebasefirebase-realtime-database

解决方案


如果您希望能够按日期排序/过滤,则需要确保这些日期以可以排序/过滤的格式存储。

toString()您用于日期的表示不是这样的格式,因为它的字典/字母排序顺序与其时间排序顺序不同。一些例子可以说明这一点:

  • 按字典顺序30 January排在 之后28 February,因为3> 2
  • 按字典顺序January 30排在 之后February 28,因为J> F

存储日期以便您对它们进行排序/过滤的正确格式是:

  • 将它们存储为时间戳,这是自纪元以来经过的毫秒数。由于这些是数值,因此可以按数字而不是按字典顺序对它们进行排序和比较。
  • 以字符串格式存储它们,其中字典顺序与时间顺序相同,例如:"2020-04-16". 因为"2020-01-30"< "2020-02-28".

有关这方面的更多信息,请参阅:


推荐阅读