sandeepmaaram
sandeepmaaram

Reputation: 4241

How to handle No Network connection using Retrofit 2.0 in Android?

I am using Retrofit 2.0 library in my android application by adding it into build.gradle file

// retrofit, gson
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'

related code is given below

ApiInterface.java

public interface ApiInterface {
   @GET("contacts/")
   Call<ContactsModel> getContactsList();
}

ApiClient.java

public class ApiClient {
public static final String BASE_URL = "http://myexamplebaseurl/";
private static Retrofit retrofit = null;


public static Retrofit getClient() {
    if (retrofit == null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
  }
}

MainActivity.java

ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

Call<ContactsModel> call = apiService.getContactsList();
    call.enqueue(new Callback<ContactsModel>() {
        @Override
        public void onResponse(Call<ContactsModel> call, Response<ContactsModel> response) {
            if(response.isSuccessful()){
                /*here is my data handling*/
            }

        }

        @Override
        public void onFailure(Call<ContactsModel> call, Throwable t) {
            /*It is the request failure case, 
              I want to differentiate Request timeout, no internet connection and any other reason behind the request failure
            */
        }
    });

if we get status code as 4xx or 5xx even though onResponse() will called, so there we need handle that condition also.

Here my question is, How to differentiate reason for request failure i.e onFailure() by using Retrofit 2.0 in Android?

Upvotes: 1

Views: 4349

Answers (1)

Blackbelt
Blackbelt

Reputation: 157457

Here my question is, How to differentiate reason for request failure by using Retrofit 2.0 in Android?

if you have a 4xx or 5xx error, onResponse is still called. There you have to check the response code of the code to check if everything was fine. E.g

if (response.code() < 400) {

in case of No Network connection, onFailure is called. There you could check the instance of the throwable. Typically an IOException

Upvotes: 1

Related Questions