Firebase 实时数据库 - 在时间范围内获取数据

在我的 Android 应用程序中,我有一个日历。当我单击一个日期时,我只想显示该选定日期的项目。换句话说,从适配器中过滤掉所有其他项目RecyclerView,只显示所选日期的项目。


目前,当活动打开时,它只显示所有项目:


Query query = FirebaseDatabase.getInstance().getReference().child(FB_SUBJECTS).child(FB_PACKS)


PagedList.Config config = new PagedList.Config.Builder()

        .setEnablePlaceholders(false)

        .setPrefetchDistance(5)

        .setPageSize(10)

        .build();


//Initialize FirebasePagingOptions

DatabasePagingOptions<FB_Model> options;

options = new DatabasePagingOptions.Builder<FB_Model>()

        .setLifecycleOwner(this)

        .setQuery(query, config, snapshot -> {

            FB_Model model = snapshot.child(FB_PROFILE).getValue(FB_Model.class);

            addMarkerToCalendarView(getMilliFromDate(model.getstart_date()));

            return model;

        })

        .build();

这将返回 处的所有项目subjects/packs。然后从这个查询中,我得到一些数据<userId>/profile/,比如start_date和end_date,例如subject/packs/001/profile/start_date


以下是start_date和的一些示例数据end_date:


end_date; "05-04-2019"

start_date: "01-04-2019"

所以,我的问题是我想过滤这些项目,但我正在使用,FirebaseRecyclerPagingAdapter但一次只能拉下一定数量的项目,例如 20。所以我不能将所有结果存储在一个大列表中并过滤它们容易地。所以我依赖于 Firebase 的一些内置功能。


是否有可能改变我Query来实现这一目标?我知道有一个startAt()andendAt()但不确定它们是否适合FirebaseRecyclerPagingAdapter。


所以我真正需要的是 SELECT * from profiles where startDate = x and endDate = y;


Android 上的实时数据库可能吗?


RISEBY
浏览 145回答 1
1回答

跃然一笑

是否可以更改我的查询以实现此目的?当然是,但有一些变化。如我所见,您将日期作为文字字符串存储在属性中,这不是end_date您在Firebase 中处理日期的方式。所以你应该将日期存储为时间戳,它基本上是一个数字,一个值。当我向 Firebase 实时数据库添加新值时如何保存当前日期/时间最后,只需将所需的时间戳传递给startAt()和endAt()方法即可。我知道有一个 startAt() 和 endAt() 但不确定它们是否适合 FirebaseRecyclerPagingAdapter。您可以传递给FirebaseRecyclerPagingAdapter任何类型的查询,包括调用startAt()和endAt()方法的查询。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java