【发布时间】: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