实现加载网络分页数据并更新到数据库中,但是数据源的变动不能直接映射到 UI 上
RemoteMediator 和 PagingSource 相似,都需要覆盖 load() 方法,但是不同的是 RemoteMediator 不是加载分页数据到 RecyclerView 列表上,而是获取网络分页数据并更新到数据库中。
区别:
PagingSource:实现单一数据源以及如何从该数据源中查找数据,例如 Room,数据源的变动会直接映射到 UI 上
RemoteMediator:实现加载网络分页数据并更新到数据库中,但是数据源的变动不能直接映射到 UI 上
在项目中如何进行选择?
PagingSource:用于加载有限的数据集(本地数据库)例如手机通讯录等等。
RemoteMediator:主要用来加载网络分页数据并更新到数据库中,当我们没有更多的数据时,我们向网络请求更多的数据,结合 PagingSource 当保存更多数据时会直接映射到 UI 上
注意:
RemoteMediator 目前是实验性的 API ,所有实现 RemoteMediator 的类都需要添加 @OptIn(ExperimentalPagingApi::class) 注解。
具体代码移步github:
https://github.com/stewForAni/Kotlin-Jetpack/tree/main/app/src/main/java/com/stew/kotlinjetpack/paging3RemoteMediator