Skip to content

A Retrofit Adapter used to handle network responses and errors

Notifications You must be signed in to change notification settings

rayworks/RetrofitResultAdapter

Repository files navigation

RetrofitResultAdapter

The adapter is designed to handle network responses and errors.

When dealing with HTTP network traffic, it is common to encounter various use cases. By leveraging the popular Retrofit library along with Result concept from the Rust programming language, we can use the CallAdapter.Factory to ensure consistent error handling.

Usage

  • Add the JitPack repository to your root build.gradle:
allprojects {
    repositories {
        //...
        maven { url 'https://jitpack.io' }
    }
}
  • Add the dependency
dependencies {
    implementation 'com.github.rayworks:RetrofitResultAdapter:0.2.0'
}
  • Define your WebService interface
import com.rayworks.resultadapter.Result

interface Service {
    @GET("bar")
    suspend fun getBar(): Result<Bar>

    // ...
}
import com.rayworks.resultadapter.error.ErrorMessage

class ErrorMsg : ErrorMessage()
  • Install the ResultAdapterFactory
val converter = object : ErrorMessageConverter<ErrorMsg> {
    override fun convert(str: String): ErrorMsg {
        return gson.fromJson(str, object : TypeToken<ErrorMsg>() {}.type)
    }
}

val retrofit = Retrofit.Builder()
    .baseUrl(host)
    .client(client)
    .addCallAdapterFactory(ResultAdapterFactory(converter))
    .addConverterFactory(GsonConverterFactory.create())
    .build()
  • Process the response or error
viewModelScope.launch(Dispatchers.IO) {
    val ans = service.getAnswers()
    when (ans) {
        is Result.NetworkError ->
            Log.e("err", "NetworkError")
    
        is Result.Failure -> {
            if (ans.error != null) {
                val errorMsg = ans.error as ErrorMsg // your error msg object
                Log.e("error occurred : ", errMsg.toString())
            } else {
                Log.e("error occurred : ", "code :${ans.code}")
            }
            
        }
    
        is Result.Success ->
            Log.i(">>>", "data recved : ${ans.data}")
    }
}

Also check sample code in here

Credit

retrofit-adapters

android-samples

NetworkResponseAdapter

About

A Retrofit Adapter used to handle network responses and errors

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Languages