2016-07-19 62 views
7

嘿,我正在开发一个应用程序,它会显示我每天添加到firebase数据库的最新数据。最近的数据应该显示在回收站视图的顶部。这里是节点如何看起来像火力firebase android分页与recyclerview

enter image description here

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

现在我能获得最后的20个节点与此查询

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

我可以在79位获得该节点的关键,如果我修改查询限制到最后21项,但如何然后使用第79个节点密钥获取下一组节点数据,即从第79个到第59个?

+0

如何保持上次获取的密钥在内存中并使用'startAt(savedKey)'?你可能可以将它与'limitToLast(20)'结合起来。只要确保你没有显示保存的密钥两次 – Sunshinator

回答

11

您会使用endAt(),因为您希望将最后一个项目返回为您以前获得的“最老的”项目。

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

oldestKeyYouveSeen被称为锚。您需要在代码中自行跟踪:将其设置为您所见过的最古老项目的关键。

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

+0

感谢您的答案弗兰克,正是我所期待的。不过我注意到,在firebase db上粘贴内容会从文本中删除新行,并将所有文本放在一行中。无论如何,使它不这样做? –

+0

这听起来像是一个完全不同的问题。但我会尝试使用“\ n”作为换行符的换码。 –

+1

嘿@FrankvanPuffelen我想知道如何获得'oldestKeyYouveSeen'? –