如何使用Android中的Retrofit 2.0处理无网络连接?

时间:2016-07-05 14:44:19

标签: android web-services retrofit retrofit2 android-webservice

我在我的Android应用程序中使用 Retrofit 2.0 库,将其添加到build.gradle文件中

// 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'

相关代码如下:

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
            */
        }
    });

如果我们将状态代码设置为4xx或5xx,即使onResponse()将被调用,那么我们也需要处理这个条件。

我的问题是,如何通过在Android中使用Retrofit 2.0来区分请求失败的原因,即onFailure()

1 个答案:

答案 0 :(得分:1)

  

我的问题是,如何区分请求失败的原因   在Android中使用Retrofit 2.0?

如果您遇到4xx或5xx错误,仍会调用onResponse。在那里你必须检查代码的响应代码,以检查一切是否正常。 E.g

if (response.code() < 400) {

如果No Network connection,则调用onFailure。在那里你可以检查throwable的实例。通常是IOException