【问题标题】:networkBoundResource depending only with RoomnetworkBoundResource 仅取决于 Room
【发布时间】:2021-10-24 21:04:15
【问题描述】:

我正在根据 Google 的文档开发一个 netboundBoundResource 库:https://developer.android.com/jetpack/guide

我的代码看起来像这样(并且有效):


inline fun <ResultType, RequestType> networkBoundResource(
    crossinline loadFromDb: () -> Flow<ResultType>,
    crossinline netWorkRequest: suspend () -> Response<RequestType>,
    crossinline saveCall: suspend (Response<RequestType>) -> Unit
): Flow<Resource<ResultType>> = flow {
    emit(Resource.Loading(loadFromDb().firstOrNull()))
    val netWorkResponse = netWorkRequest()
    emitAll(
        if (netWorkResponse.isSuccessful) {
            saveCall(netWorkResponse)
            loadFromDb().map { Resource.Success(it) }
        } else {
            loadFromDb().map { Resource.Error("Error", it) }
        }
    )
}.flowOn(Dispatchers.IO)

看起来像这样:


sealed class Resource<T>(
    val data: T? = null,
    val message: String? = null
) {
    class Success<T>(data: T) : Resource<T>(data)
    class Loading<T>(data: T? = null) : Resource<T>(data)
    class Error<T>(message: String, data: T? = null) : Resource<T>(data, message)
}

我想确保这个库只能与 ROOM 一起使用,我不确定如何管理它(它现在可以与 ROOM 一起使用)。所以,如果用户中的一个用户想要使用这个库,比如说使用 REALM,他将无法使用。

【问题讨论】:

    标签: android kotlin android-room


    【解决方案1】:

    嗯,最后这是一个棘手的问题。我发现 flowOn 正在做我需要的事情。

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多