Android分页库-数据+网络多排序

Android Paging Library - Data + Network with multiple sorting types

我最近看到 google 有一个很棒的数据分页库。

在此Google IO中:

Android Jetpack: manage infinite lists with RecyclerView and Paging (Google I/O '18)

他们解释了如何制作 Data + Network DataSource 并从数据库中获取数据作为 Single Source of Truth,当数据库没有数据时,它会使用 BoundaryCallback 从网络请求更多数据。

假设我在服务器上有一个电影列表。客户端(Android 用户)可以按受欢迎程度、标题、date_release 和...

对它们进行排序

因此,如果用户第一次按标题对电影进行排序,一切都会很好,因为数据库中没有数据,并且将从服务器请求数据以按标题对它们进行排序并将它们发回。 但是,如果该用户尝试按受欢迎程度对它们进行排序怎么办?由于数据库中有大量电影可用(例如 50 部电影),它会按受欢迎程度对少量电影进行排序,然后尝试从服务器获取数据,这不是一个好的体验。

我无法为每种排序类型设置 table,因为这不是一个好的做法。那么我该如何克服这个问题呢?

非常感谢

你的问题很有道理。 IMO,您不必为每种排序类型制作表格,但您可以跟踪数据来自哪个端点。例如,您有三个查询 ?sort=default?sort=ratings?sort=released_date 的端点。您可以将三个额外的布尔属性(比如 fromDefaultfromRatingsfromReleasedDate)添加到您的数据库模型 class 以跟踪它来自哪个端点 & 每当相同电影数据从多个端点到达时,更新那些相应的标志

现在,当您按评级排序时,您将使用 SQL 查询来过滤标志 fromRatingstrue 的那些。但最初,您将拥有 none,因此您的 BoundaryCallback 会启动服务器请求,获取分级排序的电影数据,并且在保存之前,您必须将 fromRatings 覆盖为 true. 希望对你有帮助。