【发布时间】:2020-02-24 15:41:53
【问题描述】:
有没有办法在观察实时数据之前获取 HTTP 状态代码(如 200、400...)?
这是我的实现:
结果
sealed class Result<out T: Any> {
data class Success<out T : Any>(val data: T?): Result<T>()
data class Error(val exception: Exception): Result<Nothing>()
}
BaseRepository
open class BaseRepository {
suspend fun <T: Any> safeApiCall(call: suspend () -> Response<T>, errorMessage: String): T? {
val result: Result<T> = safeApiResult(call, errorMessage)
var data: T? = null
when(result) {
is Result.Success ->
data = result.data
is Result.Error -> {
Logger.getLogger("1.DataRepository").log(Level.INFO, "$errorMessage & Exception - ${result.exception}")
}
}
return data
}
private suspend fun <T: Any> safeApiResult(call: suspend ()-> Response<T>, errorMessage: String): Result<T> {
val response = call.invoke()
if (response.isSuccessful) return Result.Success(response.body())
return Result.Error(IOException("Error Occurred during getting safe Api result, Custom ERROR - $errorMessage"))
}
}
我的存储库
class UserRepository (private val api : UserService) : BaseRepository() {
suspend fun getFavorites() : MutableList<Favorite>? {
return safeApiCall(
call = {api.getFavorites().await()},
errorMessage = "Error Fetching Favorites"
)?.toMutableList()
}
}
视图模型
class UserViewModel : ViewModel() {
private val parentJob = Job()
private val coroutineContext: CoroutineContext
get() = parentJob + Dispatchers.Default
private val scope = CoroutineScope(coroutineContext)
private val repository: UserRepository = UserRepository(ApiFactory.Apifactory.userService)
val favoritesLiveData = MutableLiveData<MutableList<Favorite>>()
fun fetchFavorites() {
scope.launch {
val favorites = repository.getFavorites()
favoritesLiveData.postValue(favorites)
}
}
}
在我的代码中,我做了这样的事情:
userViewModel.fetchFavorites()
userViewModel.favoritesLiveData.observe(this, Observer {
})
在哪里可以查看状态码?我不知道在哪里实现状态码返回。
【问题讨论】:
标签: android kotlin android-livedata