有没有办法同时使用limitToLast和limitToFirst?

时间:2019-09-09 22:06:21

标签: android firebase-realtime-database pagination

我正在尝试制作数据块(每个10个)作为查询。

limitToLast()limitToFirst()互不影响,但在一起时会导致应用崩溃。

query = db_reference_type.limitToLast((int) (long_total_buildings - (long_list_page * 10))).limitToFirst(10);

With long_list_page = 0 and long_total_buildings = 10
query = db_reference_type.limitToLast(10).limitToFirst(10);

当程序到达该行时,应用程序崩溃。

1 个答案:

答案 0 :(得分:0)

无法在单个查询中组合limitToFirst()limitToLast()。您似乎正在构建一个分页系统,并寻找Firebase中不存在的offset()条件。

了解Firebase如何处理您的请求后,更容易理解可能的情况。

  1. 当在某个位置接收查询时,Firebase会在订购查询的属性上(如果未指定顺序,则在键上)检索该位置上项目的索引。

  2. 然后找到您指示要开始从中返回项目的值。因此,这是对查询进行排序的属性的值(如果未指定顺序,则对键进行排序)。

  3. 然后找到您指示要结束返回项目的值。这也是您对查询进行排序的属性的值(如果未指定顺序,则对键进行排序)。

  4. 因此,在这一点上,数据库在索引中具有一系列值,并且通过关联与这些值匹配的项的键。

  5. 然后从开始(如果使用limitToFirst())或从结束(如果使用limitToLast)开始按项目数剪切范围内的项目。

  6. p>

最后,它返回符合所有条件的其余项。

请注意,您传递给limitToFirst / limitToLast的值仅在此过程的最后一步中使用。您似乎正在尝试在步骤3中未使用它。