# CRetrofit **Repository Path**: android_common_library/CRetrofit ## Basic Information - **Project Name**: CRetrofit - **Description**: 基于retrofit+rxjava+okhttp主流Http请求使用方式,二次封装的网络请求库,完全兼容retrofit原生使用,本库只是对retrofit功能的增强。 - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2020-06-30 - **Last Updated**: 2021-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CRetrofit #### 介绍 基于retrofit+rxjava+okhttp主流Http请求使用方式,二次封装的网络请求库,完全兼容retrofit原生使用,本库只是对retrofit功能的增强。 #### 特性 1. 支持异步和同步网络请求 2. 支持异常统一处理 3. 继承retrofit2+okhttp3+rxjava3所以功能 4. 支持文件同步/异步下载 `进度回调` 5. 支持文件同步/异步上传 `进度回调` 6. 支持文件批量上传 `进度回调` 7. 支持创建多个`xxxApiService.class`服务请求接口 8. 支持动态更换baseurl 9. 支持接口请求异常重试  #### 内置拦截器 * BaseUrlSelectInterceptor `动态配置Baseurl处理拦截器` * LoggingInterceptor `请求日志拦截器` * CommonParamsInterceptor `请求添加公共参数、公共Header拦截器` #### 请求回调 ``` /** * 请求结果回调 * * @param */ public abstract class OnHttpListener { /** * 网络请求成功回调 * * @param response 请求结果 */ public abstract void onSuccess(T response); /** * 网络请求失败回调 * * @param code 错误码 * @param msg 错误信息 */ public void onFailure(int code, String msg) { } /** * 文件下载进度回调 * * @param totalBytesRead 下载量 * @param totalLength 总量 * @param progress 下载进度 */ public void onDownloadProgress(long totalBytesRead, long totalLength, int progress) { } /** * 上传文件进度回调 * * @param bytesWritten 上传的大小 * @param contentLength 文件的总大小 * @param networkSpeed 上传速度 */ public void onUploadProgress(long bytesWritten, long contentLength, long networkSpeed) { } } ``` #### 详细使用 * 自定义全局处理类 > 通过实现 [IApiHandler] 或者继承 [ApiHandlerAdapter] ``` ##IApiHandler 接口定义 /** * 配置retrofit转换器 * * @return */ List buildConverterFactory(); /** * 构建OkhttpClient */ OkHttpClient buildOkHttpClient(); /** * 定义请求码是多少时,请求是成功的一般是0 */ boolean isResponseSuccess(int code); /** * 定义错误码对应的异常,进行网络请求重试时会用到 * * @param code 错误码 */ Exception retryWhenException(int code); /** * 重试条件处理 * * @param throwable 异常 * @param tryCount 重试的次数 */ Observable retryWhenObservable(String tag, int tryCount, Throwable throwable); /** * 根据错误码处理业务自定义的异常 * * @param code 错误码 * @param msg 错误提示 */ void handleCustomizeException(int code, String msg); /** * 处理网络请求相关的全局异常 * * @param e 异常 * @param listener 回调监听 */ void handleErrorException(Throwable e, OnHttpListener listener); ``` * 全局初始化配置 ``` ApiHelper.getInstance().init(baseApi, new DefaultApiHandler(baseApi)); ``` * 普通网络请求 ``` /** * 异步处理网络请求 * * @param observable apiService定义的http请求 * @param listener 响应回调 * @param 实现了{@link IResultData}接口的实体类才能触发异常重试机制 */ public Disposable sendRequest(Observable observable, OnHttpListener listener); /** * 异步处理网络请求 * * @param tag 请求标签,异常重试会返回 * @param observable apiService定义的http请求 * @param listener 响应回调 * @param 实现了{@link IResultData}接口的实体类才能触发异常重试机制 */ public Disposable sendRequest(String tag, Observable observable, OnHttpListener listener); ``` * 文件上传`单个/批量上传,也可附带其他参数` ``` /** * 上传文件(支持进度条) * * @param url 上传地址 * @param params 上传参数 * @param listener 回调监听 * @param isSync true:同步;false:异步 */ private Disposable uploadFiles(String url, Map params, OnHttpListener listener, boolean isSync); ``` * 文件下载 ``` /** * 文件下载(支持进度条) * * @param url 下载路径 * @param listener 监听接口 * @param isSync true 同步,false 异步 */ public Disposable downloadFile(final String url, final OnHttpListener listener, boolean isSync); ``` * 动态切换baseurl ``` # 方式1 @Headers({"Base-URL:http://www.baidu.com/"}) @GET("a/b/c") public Observable getXXX(); # 方式2(KEY_XX不能以http开头) @Headers({"Base-URL:"+ KEY_XX}) @GET("a/b/c") public Observable getXXX(); public static final String KEY_XX_BASE_URL="xxxx"; //添加baseurl addBaseUrl(KEY_XX, "http://www.baidu.com/"); ```