我最近看到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部电影)可用,因此它将按流行程度对少量电影进行排序,然后尝试从服务器获取数据,这不是一个很好的体验。
我不能为每种排序类型创建表格,因为这不是一个好习惯。那么我该如何克服这个问题呢?
非常感谢
答案 0 :(得分:1)
您的问题很有道理。 IMO不必为每种排序类型创建表,但是可以跟踪数据来自哪个端点。例如,您有三个端点,其查询为?sort=default
,?sort=ratings
,?sort=released_date
。您可以在数据库模型类中添加三个额外的布尔属性(例如fromDefault
,fromRatings
,fromReleasedDate
),以跟踪它来自哪个端点并更新这些对应的标志< / strong>每当相同电影数据从多个端点到达时。
现在,当您按评分排序时,将使用SQL查询来过滤标记fromRatings
为true
的那些对象。但是最初,您将一无所有,因此您的BoundaryCallback
会触发服务器请求,获得分级的电影数据排序,并且在保存之前,您必须将fromRatings
覆盖为true
。
希望对您有所帮助。