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
的端点。您可以将三个额外的布尔属性(比如 fromDefault
、fromRatings
、fromReleasedDate
)添加到您的数据库模型 class 以跟踪它来自哪个端点 & 每当相同电影数据从多个端点到达时,更新那些相应的标志。
现在,当您按评级排序时,您将使用 SQL 查询来过滤标志 fromRatings
为 true
的那些。但最初,您将拥有 none,因此您的 BoundaryCallback
会启动服务器请求,获取分级排序的电影数据,并且在保存之前,您必须将 fromRatings
覆盖为 true
.
希望对你有帮助。
我最近看到 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
的端点。您可以将三个额外的布尔属性(比如 fromDefault
、fromRatings
、fromReleasedDate
)添加到您的数据库模型 class 以跟踪它来自哪个端点 & 每当相同电影数据从多个端点到达时,更新那些相应的标志。
现在,当您按评级排序时,您将使用 SQL 查询来过滤标志 fromRatings
为 true
的那些。但最初,您将拥有 none,因此您的 BoundaryCallback
会启动服务器请求,获取分级排序的电影数据,并且在保存之前,您必须将 fromRatings
覆盖为 true
.
希望对你有帮助。