我想使用Retorfit 2实现错误处理机制.
可用的解决方案是使用RetrofitError类,我在当前的repo中找不到.
Nik*_*ski 14
如果要进行同步请求,请在接口中将请求方法定义为Call<List<Car>>.
一旦执行请求收到响应和反序列化裹在数据Response<T>作为Response<List<Car>>.这个包装使您可以访问标题,http代码和原始响应正文.
您可以访问错误正文:
Call<List<Car>> carsCall = carInterface.loadCars();
try {
Response<List<Car>> carsResponse = carsCall.execute();
} catch (IOException e) {
e.printStackTrace();
//network Exception is throw here
}
if(carsResponse != null && !carsResponse.isSuccess() && carsReponse.errorBody() != null){
// handle carsResponse.errorBody()
}
Run Code Online (Sandbox Code Playgroud)
对于异步调用,Throwable如果在网络调用期间抛出I/O异常,则会收到:
Call<List<Car>> call = service.loadCars();
call.enqueue(new Callback<List<Car>>() {
@Override
public void onResponse(Response<List<Car>> response) {
// Get result from response.body(), headers, status codes, etc
}
@Override
public void onFailure(Throwable t) {
//handle error
}
});
Run Code Online (Sandbox Code Playgroud)
Call<List<data>> call = MyService.loadData();
call.enqueue(new Callback<List<data>>() {
@Override
public void onResponse(Call<List<data>> call, Response<List<data>> response) {
if (response.isSuccessful()) {
//Response success. Handle data here
}
else{
//For getting error message
Log.d("Error message",response.message());
//For getting error code. Code is integer value like 200,404 etc
Log.d("Error code",String.valueOf(response.code()));
}
}
@Override
public void onFailure(Call<List<data>> call, Throwable t) {
if (t instanceof IOException){
//Add your code for displaying no network connection error
}
});
Run Code Online (Sandbox Code Playgroud)