# 框架specs_Android **Repository Path**: aa44/framework_specs_android ## Basic Information - **Project Name**: 框架specs_Android - **Description**: No description available - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2018-05-08 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BasicSDK_Public #### 项目介绍 #### 软件架构 #### 安装教程 添加Gradle依赖 先在项目根目录的 build.gradle 的 repositories 添加: allprojects { repositories { ... 'https://gitee.com/YYkevin/BasicSDK_Public/raw/master' } } 然后在dependencies添加: dependencies { ... implementation 'com.synjones:architecture:1.0.1@jar' } #### 使用说明 1.在application类里边进行初始化配置 public class MyApplication extends Application { Map headerMaps = new HashMap<>(); @Override public void onCreate() { super.onCreate(); /** * 初始化配置 */ RxHttpUtils.init(this); RxHttpUtils .getInstance() //开启全局配置 .config() //全局的BaseUrl .setBaseUrl("https://api.douban.com/") //全局的请求头信息 //.setHeaders(headerMaps) //全局持久话cookie,保存本地每次都会携带在header中 .setCookie(false) //全局ssl证书认证 //信任所有证书,不安全有风险 .setSslSocketFactory() //使用预埋证书,校验服务端证书(自签名证书) //.setSslSocketFactory(getAssets().open("your.cer")) //使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书) //.setSslSocketFactory(getAssets().open("your.bks"), "123456", getAssets().open("your.cer")) //全局超时配置 .setReadTimeout(10) //全局超时配置 .setWriteTimeout(10) //全局超时配置 .setConnectTimeout(10) //全局是否打开请求log日志 .setLog(true); } } 2. 默认已实现三种数据格式 1. CommonObserver (使用写自己的实体类即可,不用继承任何base) 2. StringObserver (直接String接收数据) 3. DataObserver (适合{"code":200,"msg":"描述",data:{}}这样的格式,需要使用BaseData ,其中T为data中的数据模型) 如果以上三种不能满足你的需要,可以分别继承对应的base方法实现自己的逻辑 #### 代码实例 1.0 使用Application里边的全局配置参数的请求示例 RxHttpUtils .createApi(ApiService.class) .getBook() .compose(Transformer.switchSchedulers()) .subscribe(new CommonObserver() { @Override protected void onError(String errorMsg) { //错误处理 } @Override protected void onSuccess(BookBean bookBean) { //业务处理 } }); 1.1 使用DataObserver请求示例 1. @GET("api/test") Observable> geTestData(); 2. RxHttpUtils.createApi(ApiServer.class) .geTestData() .compose(Transformer.>switchSchedulers()) .subscribe(new DataObserver() { @Override protected void onError(String errorMsg) { } @Override protected void onSuccess(TestBean data) { } }); 2.1. 单个请求使用默认配置 //单个请求使用默认配置的参数 RxHttpUtils .getSInstance() .baseUrl("https://api.douban.com/") .createSApi(ApiService.class) .getTop250(10) .compose(Transformer.switchSchedulers(loading_dialog)) .subscribe(new CommonObserver(loading_dialog) { @Override protected void onError(String errorMsg) { //错误处理 } @Override protected void onSuccess(Top250Bean top250Bean) { //业务处理 } }); 2.2. 单个请求配置参数示例(可以根据需求选择性的配置) //单个请求自己配置相关参数 RxHttpUtils.getSInstance() .baseUrl("https://api.douban.com/") .addHeaders(headerMaps) .cache(true) .cachePath("cachePath", 1024 * 1024 * 100) .sslSocketFactory() .saveCookie(true) .writeTimeout(10) .readTimeout(10) .connectTimeout(10) .log(true) .createSApi(ApiService.class) .getTop250(10) .compose(Transformer.switchSchedulers(loading_dialog)) .subscribe(new CommonObserver(loading_dialog) { @Override protected void onError(String errorMsg) { //错误处理 } @Override protected void onSuccess(Top250Bean top250Bean) { //业务处理 } }); 2.3. 单个请求返回string RxHttpUtils.getSInstance() .baseUrl("https://api.douban.com/") //注意这两个配置的顺序 .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .createSApi(ApiService.class) .getBookString() .compose(Transformer.switchSchedulers(loading_dialog)) .subscribe(new StringObserver(loading_dialog) { @Override protected void onError(String errorMsg) { } @Override protected void onSuccess(String data) { showToast(data); responseTv.setText(data); } }); 3.0. 链式请求--请求参数是上个请求的结果 RxHttpUtils .createApi(ApiService.class) .getBook() .flatMap(new Function>() { @Override public ObservableSource apply(@NonNull BookBean bookBean) throws Exception { return RxHttpUtils .createApi(ApiService.class) .getTop250(20); } }) .compose(Transformer.switchSchedulers(loading_dialog)) .subscribe(new CommonObserver(loading_dialog) { @Override protected void onError(String errorMsg) { //错误处理 } @Override protected void onSuccess(Top250Bean top250Bean) { //业务处理 } }); 4.0. 文件下载 ----使用简单粗暴 String url = "https://t.alipayobjects.com/L1/71/100/and/alipay_wap_main.apk"; String fileName = "alipay.apk"; RxHttpUtils .downloadFile(url) .subscribe(new DownloadObserver(fileName) { @Override protected void getDisposable(Disposable d) { //方法暴露出来使用者根据需求去取消订阅 //d.dispose();在onDestroy方法中调用 } @Override protected void onError(String errorMsg) { } @Override protected void onSuccess(long bytesRead, long contentLength, float progress, boolean done, String filePath) { log.d("allen","下载中:" + progress + "%"); if (done) { showToast("下载完成---文件路径"+filePath); } } }); 5.0. 上传图片 上传单张图片的接口 RxHttpUtils.uploadImg(uploadUrl, uploadPath) .compose(Transformer.switchSchedulers(loading_dialog)) .subscribe(new CommonObserver(loading_dialog) { @Override protected void onError(String errorMsg) { Log.e("allen", "上传失败: " + errorMsg); showToast(errorMsg); } @Override protected void onSuccess(ResponseBody responseBody) { try { showToast(responseBody.string()); Log.e("allen", "上传完毕: " + responseBody.string()); } catch (IOException e) { e.printStackTrace(); } } }); 上传多张图片的接口 RxHttpUtils.uploadImgs("yourPicUrl", uploadPaths) .compose(Transformer.switchSchedulers(loading_dialog)) .subscribe(new CommonObserver(loading_dialog) { @Override protected void onError(String errorMsg) { } @Override protected void onSuccess(ResponseBody responseBody) { } }); 6. 统一取消请求 @Override protected void onDestroy() { super.onDestroy(); //取消所有请求 RxHttpUtils.cancelAllRequest(); } 7. onError中默认Toast的控制显示隐藏的配置 在CommonObserver或DataObserver或StringObserver中重写isHideToast方法,默认false显示toast //默认false 隐藏onError的提示 @Override protected boolean isHideToast() { return true; } #### 参数说明 全局参数:在application中配置的参数都是以setXXX开头的,根据实际需求配置相应参数即可 //初始化(必须配置) RxHttpUtils.init(this); //开启全局配置 .config() //全局的BaseUrl .setBaseUrl(BuildConfig.BASE_URL) //开启缓存策略 .setCache() //全局的请求头信息 .setHeaders(headerMaps) //全局持久话cookie,保存本地每次都会携带在header中 .setCookie(false) //全局ssl证书认证,支持三种方式 //信任所有证书,不安全有风险 .setSslSocketFactory() //使用预埋证书,校验服务端证书(自签名证书) //.setSslSocketFactory(getAssets().open("your.cer")) //使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书) //.setSslSocketFactory(getAssets().open("your.bks"), "123456", getAssets().open("your.cer")) //全局超时配置 .setReadTimeout(10) //全局超时配置 .setWriteTimeout(10) //全局超时配置 .setConnectTimeout(10) //全局是否打开请求log日志 .setLog(true); 单个请求参数: //单个请求的实例getSInstance(getSingleInstance的缩写) .getSInstance() //单个请求的baseUrl .baseUrl("https://api.douban.com/") //单个请求的header .addHeaders(headerMaps) //单个请求是否开启缓存 .cache(true) //单个请求的缓存路径及缓存大小,不设置的话有默认值 .cachePath("cachePath", 1024 * 1024 * 100) //单个请求的ssl证书认证,支持三种方式 //1、信任所有证书,不安全有风险 .setSslSocketFactory() //2、使用预埋证书,校验服务端证书(自签名证书) //.setSslSocketFactory(getAssets().open("your.cer")) //3、使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书) //.setSslSocketFactory(getAssets().open("your.bks"), "123456", getAssets().open("your.cer")) //单个请求是否持久化cookie .saveCookie(true) //单个请求超时 .writeTimeout(10) .readTimeout(10) .connectTimeout(10) //单个请求是否开启log日志 .log(true) //区分全局变量的请求createSApi(createSingleApi的缩写) .createSApi(ApiService.class) #### 注意事项: 适合请求结果是以下情况的(当然用户可以根据自己的实际需求稍微修改一下代码就能满足自己的需求) 1、如果你的服务器返回的是普通的结果,例如 code为错误状态码 ; msg为错误描述信息 { "code": 200, "msg": "错误描述", "name":"Allen" "job":"Android" ... ... ... } 可以直接写自己的实体类即可,使用CommonObserver 2、如果你的服务器返回的是标准的格式,例如 code为错误状态码 ; msg为错误描述信息 { "code": 200, "msg": "错误描述", "data":{ "name":"Allen" "job":"Android" ... } } 可以直接写自己的实体类,然后使用BaseData,配合DataObserver即可 3、不论服务器返回什么,如果你想要拿到原始数据自行处理,就直接使用StringObserver #### 更新日志: #### 意见反馈: