Есть ли способ получить код состояния 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>()
}
Базовый репозиторий
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()
}
}
ViewModel
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 {
})
Где я могу проверить код состояния? Я не могу понять, где реализовать возврат кода состояния.