赞
踩
Paging组件除了单纯地支持网络、数据库为数据源外,还支持网络+数据库的架构方式,这就用到了BoundaryCallback。本文我们会使用PositionalDataSource方式加载数据,来简化多数据源应用的复杂度。
BoundaryCallback的使用流程如下:
通过流程图可知,数据库是页面的唯一数据来源:页面订阅了数据库的变化,当数据库中的数据发生变化时,会直接反映到页面上。
接下来将在Android_Jetpack:Paging组件之PageKeyedDataSource的MVVM使用的基础上,使用BoundaryCallback和Room组件进行展示。
①引入依赖,创建room数据库和Model类,以及针对Model类实现对应的Dao文件,以方便对数据的增删改查。
//按照"最新笑话"定义
data class JokeResponse(val reason:String, val result:Result,@SerializedName("error_code") val errorCode :Int) {
data class Result(val data:List<Joke>)
@Entity(tableName = "joke")
data class Joke(val content:String, val hashId:String,val unixtime:Long,val updatetime:String){
@PrimaryKey(autoGenerate = true)
var id:Long = 0
}
}
@Dao
interface JokeDao {
@Insert
fun insertJokes(jokes: List<JokeResponse.Joke>)
@Query("DELETE FROM joke")
fun clear()
@Query("SELECT * FROM joke")
fun getJokeList(): DataSource.Factory<Int,JokeResponse.Joke>
}
注意getJokeList()方法返回的是一个DataSource.Factory,这样就可以实现数据库的订阅。
②实现BoundaryCallback。
class JokeBoundaryCallback(private val jokeDao: JokeDao):PagedList.BoundaryCallback<JokeResponse.Joke> (){
private val sharedPreferences: SharedPreferenc
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。