您的位置:首页 > 其它

Retrofit中 RestAdapter.LogLevel.FULL 含义,自己写错误处理方法+请求拦截器

2015-09-13 15:18 429 查看
转载:http://www.cnblogs.com/laiqurufeng/p/4484916.html

LOGGING

可以通过添加logging level等级来详细观看请求和响应. logging level 分为 BASIC, FULL, HEADERS, and NONE.

Full等级将会打印request和response的headers.body,和metadata等

不同于拦截器或者ErrorHandler,可以在RestAdapter生命周期的任何时候通过setLogLevel()添加或者更改logging level.

ERROR

如果需要自定义一个网络访问错误的处理方法,需要自定义一个ErrorHandler.下面的代码当返回码是401的时候抛出一个自定义异常.



class MyErrorHandler implements ErrorHandler {
  @Override public Throwable handleError(RetrofitError cause) {
    Response r = cause.getResponse();
    if (r != null && r.getStatus() == 401) {
      return new UnauthorizedException(cause);
    }
    return cause;     //返回值不能是null,否则运行时会出现异常.
  }
}




特别注意在网络访问时返回码为40x,50x,IOException时,都会转化为RetrofitError再次抛出.
因为RetrofitError是RuntimeException.不会提示用户进行捕捉.所以如果在Android平台上就会造成应用崩溃.
解决办法就是不要采用同步的方式,采用CallBack异步的方式. 异常在CallBack的failure()方法中就可以得到妥善的处理.不会再次抛出.

ErrorHandler的handlerError()方法不能retrun null.否则会抛出RuntimeException.

实际开发中对Error最好做不同的处理.通过RetrofitError.getKind()获得具体的错误类型.

可以根据RetrofitError.getKind()来获取具体是哪种类型的错误.

RequestInterceptor 请求拦截器

对于网络访问请求的重复操作部分都可以这么做. 拦截器的执行是在执行网络访问前最后执行的. 所以会覆盖前面的某些配置.

RequestInterceptor requestInterceptor = new RequestInterceptor() {
  @Override
  public void intercept(RequestFacade request) {
    request.addHeader("User-Agent", "Retrofit-Sample-App");
  }
};


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: