Um simples projeto open-source para ajudar desenvolvedores com callAdapter personalizado.
Essa é uma versão experimental, novas atualizações viram em breve.
io.github.lnsantos:monfu-network:0.0.3-alpha
Adicione MonfuNetworkCallAdapterFactory na sua configuração do retrofit.
private val retrofitInstance = Retrofit.Builder()
.addCallAdapterFactory(MonfuNetworkCallAdapterFactory.create())
.build()
MonfuResult da suporte a coroutines, então a sua UI thread não vai travar quando precisa fazer uma requisição.
@GET("/example")
suspend fun getExample(): MonfuResult<ExampleResponse>
Caso não seja utilizado suspend fun, vai ser necessário aplicar um tratamento com thread para não travar a UI.
Depois que a requisição é efetuada seja com sucesso ou erro podemos está manipulando o resultado via class.
Exemplo:
when (val resultApi = api.getExample()) {
is MonfuSuccess -> {
// Seu feedback de sucesso
println(resultApi.data)
}
is MonfuFailed -> {
// Qualquer status code
if(resultApi.code == 427) {
val error : MeuBackenError = Gson().fromJson(
resultApi.errorBody,
MeuBackenError::class.java
)
reference.value = error.mensagemPersonalizada
}
}
is MonfuUnknown -> {
// Qualquer erro inesperado, onde não conseguimos descobrir oque ocorrer exemplo falhas com a internet.
println(resultApi.exception.message)
}
}
MonfuFlow é um typealias de Flow, então caso você queira utilizar o flow normal você vai conseguir normalmente, diferente do MonfuResult ele encapsula todos os problemas por exception.
@GET("/example")
suspend fun getExample(): MonfuFlow<ExampleResponse>
// ou
@GET("/example")
suspend fun getExample(): Flow<ExampleResponse>
❗ Essa biblioteca ainda está em desenvolvimento, a versão alpha foi liberada para que o público externo consiga efetuar os testes e retornar com feedback.