Jetpack 里面的 Paging 和 Room

paging 主要作用就是用来加载列表数据以及加载更多也就是分页加载的,展示还是人家 recyclerview 的事儿,只不过 paging 可以把这个过程变得更加的高效。想想咱们以前加载更多怎么做的,我们需要关注到 recyclerview 或者 listview 通过他们知道用户是不是滑动到页面底部了,是不是该加载更多了,并且还需要我们自己维护加载到第几页,下次该加载哪一页,而现在呢?这一切几乎都不需要我们开发者自己维护,全部都交给 paging 吧。

说到 paging,对它很重要的就是它的数据源,也就是 datasource,而 datasource 一般分为三种,其一是只从网络加载数据,其二是只从本地数据库加载数据,其三是当本地数据库没有数据的时候,先从网络加载,然后缓存到本地数据库,而后再从数据库响应到视图层。

其中估计我们最常用的就是直接从网络加载数据,但是官方的示例是上面我写的其三那种情况,是用 retrofit 处理网络请求,然后用 jetpack 里面的 room 数据库做本地缓存,所以我们还需要了解下这种方式,我们知道 room 数据库的 Dao 层可以直接将数据以 LiveData 包装的形式查询出来,但是 pagelist 需要的是 datasource,所以我们需要将 Dao 层的查询结果返回值改为 DataSource.Factory<Key, Value>,其中的 key 指的是我们的请求参数,例如我们分页加载时候要加载第几页,value 指的是查询出来的可以给视图层直接使用的实体。

但是我们知道视图层的数据是由 viewmodel 管理的,而暴露给数据层又是 LiveData,所以现在我们需要做的是将从数据库查询出来的 datasource 转换为视图层可以使用的 LiveData,这时候我们就需要用到 LivePagedListBuilder 了,这是一个对 pagelist 做配置以及提供数据源的建造者,所以它实例化的时候需要传入两个参数,一个是 datasource,另外一个是关于 pagelist 的 Config,这里传入的 datasource 就是我们从数据库查询出来的那个,而 config 需要我们自己构造,我们可以配置分页加载时候每页加载的条数,可以配置如果数据还没加载完成的时候是否有占位等等,这些配置完成之后,我们直接调用 LivePagedListBuilder 的 build 方法就可以得到一个 LiveData<Page

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值