content: package <%= appPackage %>.weather.app;
  
  import android.content.Context;
  import android.net.ParseException;
  
  import com.google.gson.JsonParseException;
  
  import org.json.JSONException;
  
  import java.net.SocketTimeoutException;
  import java.net.UnknownHostException;
  
  import me.jessyan.rxerrorhandler.handler.listener.ResponseErrorListener;
  import <%= appPackage %>.lifecycle.utils.UiUtils;
  import retrofit2.HttpException;
  import timber.log.Timber;
  
  /**
   * @author xiaobailong24
   * @date 2017/9/5
   * 全局处理所有错误的监听
   */
  public class ResponseErrorListenerImpl implements ResponseErrorListener {
      final int serverError = 500;
      final int notFoundError = 404;
      final int serverForbiddenError = 403;
      final int redirectionError = 307;
  
      @Override
      public void handleResponseError(Context context, Throwable t) {
          //用来提供处理所有错误的监听
          //rxjava必要要使用ErrorHandleSubscriber(默认实现Subscriber的onError方法),此监听才生效
          Timber.tag("Catch-Error").w(t.getMessage());
          //这里不光是只能打印错误,还可以根据不同的错误作出不同的逻辑处理
          String msg = "未知错误";
          if (t instanceof UnknownHostException) {
              msg = "网络不可用";
          } else if (t instanceof SocketTimeoutException) {
              msg = "请求网络超时";
          } else if (t instanceof HttpException) {
              HttpException httpException = (HttpException) t;
              msg = convertStatusCode(httpException);
          } else if (t instanceof JsonParseException || t instanceof ParseException || t instanceof JSONException) {
              msg = "数据解析错误";
          }
          UiUtils.snackbarText(msg);
      }
  
  
      private String convertStatusCode(HttpException httpException) {
          String msg;
          if (httpException.code() == serverError) {
              msg = "服务器发生错误";
          } else if (httpException.code() == notFoundError) {
              msg = "请求地址不存在";
          } else if (httpException.code() == serverForbiddenError) {
              msg = "请求被服务器拒绝";
          } else if (httpException.code() == redirectionError) {
              msg = "请求被重定向到其他页面";
          } else {
              msg = httpException.message();
          }
          return msg;
      }
  }
  