Android:NetworkBoundRsourcevsRemoteMediator如何实现数据层的缓存控制?
创始人
2024-10-06 04:31:10
0

在Android开发中,使用NetworkBoundResource+Room完成数据层的缓存控制是一种常用方式。RemoteMediator则可以在Room中处理分页数据。对于需要同时使用这两个类来实现数据层的缓存控制的情况,可以使用以下解决方案。

示例代码:

  1. 创建包含“Resource”和“data”的类,用于访问缓存和网络数据:
class DataResource(val status: Status, val data: T?, val message: String?) {
    enum class Status {
        SUCCESS,
        ERROR,
        LOADING,
        REFRESH
    }

    companion object {
        fun  success(data: T?): DataResource =
            DataResource(Status.SUCCESS, data, null)

        fun  error(msg: String?, data: T?): DataResource =
            DataResource(Status.ERROR, data, msg)

        fun  loading(data: T?): DataResource =
            DataResource(Status.LOADING, data, null)

        fun  refresh(data: T?): DataResource =
            DataResource(Status.REFRESH, data, null)
    }
}
  1. 创建NetworkBoundResource类,它封装了Room查询和网络请求,以及从网络更新RoomDatabase的方法:
abstract class NetworkBoundResource {

    fun asLiveData() = flow> {

        emit(DataResource.loading(null))

        val dbValue = loadFromDb().first()
        if (shouldFetch(dbValue)) {
            emit(DataResource.refresh(dbValue))

            try {
                fetchFromNetwork(dbValue?.let { getResultFromDb(it) }).collect { apiResponse->
                    when (apiResponse.status) {
                        Status.SUCCESS -> {
                            saveCallResult(apiResponse.data!!)
                            emitAll(loadFromDb().map {
                                DataResource.success(it)
                            })
                        }
                        Status.ERROR -> {
                            onFetchFailed()
                            emit(DataResource.error(apiResponse.message, dbValue))
                        }
                        Status.LOADING -> {
                            emit(Data

相关内容

热门资讯

第五分钟辅助!aapoker怎... 第五分钟辅助!aapoker怎么设置提高好牌几率,如何下载wpk透视版,演示教程(有挂方针)1、aa...
第8分钟辅助!wpk安卓下载辅... 第8分钟辅助!wpk安卓下载辅助,哈糖大菠萝怎么挂,经验教程(有挂方法)哈糖大菠萝怎么挂破解侠是真的...
第三分钟辅助!hhpoker免... 第三分钟辅助!hhpoker免费辅助器,aapoker辅助软件合法吗,烘培教程(有挂神器)一、aap...
第二分钟辅助!wepoker插... 第二分钟辅助!wepoker插件功能辅助器,wepoker私人局透视插件,妙招教程(有挂细节)1、金...
六分钟辅助!wepoker透视... 六分钟辅助!wepoker透视是真的吗,wpk俱乐部辅助器,阶段教程(发现有挂)1、wepoker透...
第四分钟辅助!wepoker有... 第四分钟辅助!wepoker有没有透视方法,wepoker有机器人吗,妙计教程(有挂攻略)1、用户打...
第3分钟辅助!hh poker... 第3分钟辅助!hh poker透视器下载,德普之星透视,技法教程(有挂功能)在进入hh poker透...
第1分钟辅助!wepoker数... 第1分钟辅助!wepoker数据分析,we-poker有人玩吗,法门教程(有挂助手)1、we-pok...
第一分钟辅助!wepoker破... 第一分钟辅助!wepoker破解器,菠萝辅助器免费版的特点,经验教程(有挂规律)1、玩家可以在菠萝辅...
5分钟辅助!约局吧德州真的有透... 5分钟辅助!约局吧德州真的有透视挂吗,we-poker软件,妙计教程(今日头条)约局吧德州真的有透视...