我在我的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()
?
答案 0 :(得分:1)
我的问题是,如何区分请求失败的原因 在Android中使用Retrofit 2.0?
如果您遇到4xx或5xx错误,仍会调用onResponse
。在那里你必须检查代码的响应代码,以检查一切是否正常。 E.g
if (response.code() < 400) {
如果No Network connection
,则调用onFailure
。在那里你可以检查throwable的实例。通常是IOException