【问题标题】:firebase android pagination with recyclerview带有recyclerview的firebase android分页
【发布时间】:2016-11-22 19:42:42
【问题描述】:

嘿,我正在开发一个应用程序,它将显示我每天添加到 firebase 数据库中的最新数据。最近的数据应该出现在 recyclerview 的顶部。这是节点在 firebase 上的样子

假设当前数据库中有 100 个节点。当应用程序打开时,它会在节点 100 到 80 中存储数据。当用户向下滚动时,它会在节点 79 到 59 中存储更多最新数据,依此类推。

现在我可以通过这个查询获得最后 20 个节点

   Query jokesQuery = FirebaseDatabase.getInstance().getReference().child("hindi-jokes").orderByKey().limitToLast(20);

如果我将查询修改为限制为最后 21 个项目,我可以获得位置 79 的节点的键,但是我如何使用第 79 个节点键来获取下一组节点数据,即从第 79 个到第 59 个?

【问题讨论】:

  • 如何将最后一次获取的密钥保存在内存中并使用startAt(savedKey)?您可能可以将其与limitToLast(20) 结合使用。只要确保您没有显示保存的密钥两次

标签: android firebase pagination firebase-realtime-database


【解决方案1】:

您将使用endAt(),因为您希望返回的最后一项是您之前获得的“最旧”项。

DatabaseReference jokesRef = FirebaseDatabase.getInstance().getReference().child("hindi-jokes");
Query jokesQuery = jokesRef.orderByKey().endAt(oldestKeyYouveSeen).limitToLast(20);

oldestKeyYouveSeen 被称为锚点。您需要自己在代码中进行跟踪:将其设置为您见过的最旧项目的键。

请注意,它会在第一个查询和第二个查询中出现,因此您必须在代码中明确排除它一次。

【讨论】:

  • 感谢弗兰克的回答,正是我想要的。但是我注意到在 firebase db 上粘贴内容会从文本中删除新行并将所有文本放在单行中。无论如何让它不这样做?
  • 这听起来像是一个完全不同的问题。但我会尝试使用 "\n" 作为换行符的转义符。
  • 嘿@FrankvanPuffelen 我想知道如何获得oldestKeyYouveSeen
  • 是的,我们是否需要获取最后一个元素才能获取最旧的KeyYouveSeen?
  • 弗兰克的回答是正确的,如果你想要详细的答案,那么你也可以查看这个开源应用程序。 github.com/Shajeel-Afzal/…
猜你喜欢
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多