# Leopard 2.0 技术使用文档,适用于Leopard库1.4-2.0版本,主要正对如下优化 > 1.下载上传内部优化,部分操作入口更改 > 2.基本请求回调优化,部分操作入口更改 > 3.增加缓存使用说明文档 > 4.简化单例构建LeopardHttp使用,无须再初始化,部分操作入口更改 ## 导航 ### 使用方法(自动化构建) - [0.绑定域名,无须初始化](#user-content-0-绑定域名无须初始化)
- [1. 基本请求](#user-content-1-基本请求)
- [1.1 post与get键值对请求](#user-content-11--post与get键值对请求)
- [1.2 post与get自定义Json对象请求](#user-content-12--post与get自定义json对象请求)
- [1.3 post与get请求,带头部](#user-content-13-post与get请求带头部)
- [2. 请求回调](#user-content-2-请求回调)
- [3. 缓存使用](#user-content-3-缓存使用)
- [4. 上传管理](#user-content-4-上传管理)
- [4.1 基本上传](#user-content-41-基本上传)
- [5. 下载管理](#user-content-5-下载管理)
- [5.1 基本下载(添加任务Task与启动下载)](#user-content-51-基本下载添加任务task与启动下载)
- [5.2 DownLoadManager 单任务下载管理](#user-content-52-downloadmanager-单任务下载管理)
- [5.3 DownLoadManager 多任务下载管理](#user-content-53-downloadmanager-多任务下载管理)
### 使用方法(自定义) - [1. 基本请求](#pro_1)
- [1.1 post与get键值对请求](#user-content-11-post与-get-键值对请求)
- [1.2 post与get自定义Json对象请求](#user-content-12-post与-get-自定义json请求)
- [2. 下载管理 ( 由DownLoadManager 管理)](#user-content-2-下载管理--由downloadmanager-管理)
- [3. 上传管理](#user-content-3-上传管理) ## 使用方法(自动化构建) 为了减少使用者使用复杂度,leopard里面有集成好自动构建的对象,采用的是单例模式。不过笔者还是推荐根据需求自定义,使用方法如下: #### 0. 绑定域名,无须初始化 ````` /** 因为是单例模式进行构建leopard请求,所以请求前需要先进行域名绑定 **/ LeopardHttp.bindServer("http://wxwusy.applinzi.com"); ````` #### 1. 基本请求 首先在请求参数的时候必须定义一个model,并且继承Leopard里面的类BaseEnetity,具体定义的model如下例子: ````` public class RequestPostModel extends BaseEnetity{ @Override public String getRuqestURL() { return "sample/post.php";//你的访问url } //请求参数 private String data; private String time; public RequestPostModel(String data, String time) { this.data = data; this.time = time; } //必须构建get set方法 public String getData() { return data; } public void setData(String data) { this.data = data; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } } ````` #### 1.1 post与get键值对请求 ##### 1.1.1 POST ````` /** * * @param type 请求类型,具体看HttpMethod,提供了四种请求类型 * @param context 上下文 * @param enetity 请求model * @param httpRespondResult 回调接口 */ LeopardHttp.SEND(HttpMethod.POST,getActivity(),new RequestPostModel("leopard", Utils.getNowTime()), new HttpRespondResult(getActivity()) { @Override public void onSuccess(String content) {//json resonseData.setText("onSuccess \n"+content); } @Override public void onFailure(Throwable error, String content) { resonseData.setText("onFailure \n"+content); } }); ````` ##### 1.1.2 GET ````` /** * * @param type 请求类型,具体看HttpMethod,提供了四种请求类型 * @param context 上下文 * @param enetity 请求model * @param httpRespondResult 回调接口 */ LeopardHttp.SEND(HttpMethod.GET,getActivity(),new RequestGetModel("leopard", Utils.getNowTime()), new HttpRespondResult(getActivity()) { @Override public void onSuccess(String content) {//json resonseData.setText("onSuccess \n"+content); } @Override public void onFailure(Throwable error, String content) { resonseData.setText("onFailure \n"+content); } }); ````` ##### 1.2 post与get自定义Json对象请求 ###### 1.2.1 POST JSON ````` /** * * @param type 请求类型,具体看HttpMethod,提供了四种请求类型 * @param enetity 请求model * @param httpRespondResult 回调接口 */ LeopardHttp.SEND(HttpMethod.POST_JSON,getActivity(),new RequestPostJsonModel("leopard", Utils.getNowTime()), new HttpRespondResult(getActivity()) { @Override public void onSuccess(String content) {//json resonseData.setText("onSuccess \n"+content); } @Override public void onFailure(Throwable error, String content) { resonseData.setText("onFailure \n"+content); } }); ````` #### 1.3 post与get请求,带头部 ###### 1.3.1 POST 带头部请求 ````` HashMap headers = new HashMap<>(); headers.put("apikey","dqwijotfpgjweigowethiuhqwqpqeqp"); headers.put("apiSecret","ojtowejioweqwcxzcasdqweqrfrrqrqw"); headers.put("name","leopard"); /** * * @param type 请求类型,具体看HttpMethod,提供了四种请求类型 * @param context 上下文 * @param enetity 请求model * @param header 请求头文件 * @param httpRespondResult 回调接口 */ LeopardHttp.SEND(HttpMethod.POST,getActivity(),new RequestPostModel("leopard", Utils.getNowTime()),headers, new HttpRespondResult(getActivity()) { @Override public void onSuccess(String content) { resonseData.setText("onSuccess \n"+content); } @Override public void onFailure(Throwable error, String content) { resonseData.setText("onFailure \n"+content); } }); ````` ###### 1.3.2 GET 带头部请求 ````` HashMap headers = new HashMap<>(); headers.put("apikey","dqwijotfpgjweigowethiuhqwqpqeqp"); headers.put("apiSecret","ojtowejioweqwcxzcasdqweqrfrrqrqw"); headers.put("name","leopard"); /** * * @param type 请求类型,具体看HttpMethod,提供了四种请求类型 * @param context 上下文 * @param enetity 请求model * @param header 请求头文件 * @param httpRespondResult 回调接口 */ LeopardHttp.SEND(HttpMethod.GET,getActivity(),new RequestPostModel("leopard", Utils.getNowTime()),headers, new HttpRespondResult(getActivity()) { @Override public void onSuccess(String content) { resonseData.setText("onSuccess \n"+content); } @Override public void onFailure(Throwable error, String content) { resonseData.setText("onFailure \n"+content); } }); ````` #### 2. 请求回调 目前Leopard支持两种回调方式 1、HttpRespondResult 普通回调方式,返回Success结果统一为Json字符串,需要由开发者自己进行Json解析 2、HttpRespondObjectResult 类型转化回调方式,返回是一个泛型,因此只需要开发者在传入泛型类型,即可以进行Object类型回掉 ###### 案例 ````` public void postObj(){ LeopardHttp.SEND(HttpMethod.POST,getActivity(),new RequestPostModel("leopard", "888888"), new HttpRespondObjectResult() { @Override public void onSuccess(Task task) { // 通过task获取响应成功的实体类 TestResponseModel model = task.getResult(); resonseData.setText("onSuccess \n" +model.getAuthor() + " " + model.getInfo()); } @Override public void onFailure(Throwable error, String content) { resonseData.setText("onFailure \n"+content); } }); } ````` #### 3. 缓存使用 目前Leopard支持两种缓存方式,分别为在线缓存、离线缓存,并且支持POST、GET两种 ** 在线缓存 ** :允许开发者自定义在线缓存时间(默认是1分钟)。在缓存时间内,执行相同的请求,不会重新去服务器获取新数据,而是在本地缓存,尽可能减少了对后台服务器请求压力。 ** 离线缓存 ** :在客户端处于网络离线状态时,仍然可以请求时获取数据。 1、如果使用的是单例创建的LeopardHttp,只需要打开缓存开关即可 ````` LeopardHttp.setUseCache(true);// 是否启动缓存 ````` 这里LeopardHttp默认只打开了离线缓存,如果需要在线缓存,请开发者自主构建LeopardClient进行请求 2、如果是自主构建LeopardClient,只需要引入CacheFactory即可 ###### 案例 ````` // 开启离线缓存 LeopardClient client = new LeopardClient.Builder(mC,ADDRESS) .addCacheFactory(CacheFactory.create(mC)) .build(); } // 开启在线缓存 LeopardClient client = new LeopardClient.Builder(mC,ADDRESS) .addCacheFactory(CacheFactory.create(mC,true)) .build(); } // 开启在线缓存 自定义时间 LeopardClient client = new LeopardClient.Builder(mC,ADDRESS) .addCacheFactory(CacheFactory.create(mC,true,100)) // 100 秒 .build(); } ````` #### 4. 上传管理 首先在上传的时候必须先看下上传封装实体类FileUploadEnetity(部分代码) ````` ..... private String url; private List files = new ArrayList<>(); public FileUploadEnetity(String url, File file) { this.url = url; this.files.add(file); initSize(); } public FileUploadEnetity(String url, List files) { this.url = url; this.files = files; initSize(); } ..... ````` 在上传的时候,允许开发者上传你一个或多个文件。如果是上传一个文件的时候,构建的时候只需要传入上传地址与File类型的文件;反之上传多文件,构建的时候只需要传入上传地址与List 类型的文件队列类型。 ##### 4.1 基本上传 1、 使用单例 LeopardHttp ````` /** * 上传入口 * * @param FileUploadEnetity 上传封装实体类 * @param IProgress 上传进度回调接口 */ LeopardHttp.UPLOAD(new FileUploadEnetity("http://wxwusy.applinzi.com/leopardWeb/app/sample/upload.php",fileList), new UploadIProgress() { @Override public void onProgress(long progress, long total, int index, boolean done) { Log.i("yuan","upload state: "+progress + " - "+total); if (done){ progressDialog.dismiss(); Toast.makeText(getActivity(),"所有图片上传成功!!",Toast.LENGTH_SHORT).show(); } } @Override public void onSucess(String result) { // 上传成功 后台服务器返回结果 Toast.makeText(getActivity(),result,Toast.LENGTH_SHORT).show(); } @Override public void onFailed(Throwable e, String reason) { Toast.makeText(getActivity(),reason,Toast.LENGTH_SHORT).show(); } }); ````` #### 5. 下载管理 2.0下载管理,比较大的变化是DownLoadInfo减少了依赖DownLoadTask,尽可能减少对Task的暴露,一切操作由DownLoadManager进行管理。 首先底层断点信息数据库存储由Greendao数据库框架支持。其次,在下载的时候必须看下实体封装类DownloadInfo ,在进行添加下载Task的时候,在构建DownloadInfo 对象的时候,至少初始化下载地址、存储文件名。例如以下代码: ````` String url = "http://f1.market.xiaomi.com/download/AppStore/03f82a470d7ac44300d8700880584fe856387aac6/cn.wsy.travel.apk"; DownloadInfo info = new DownloadInfo(); info.setUrl(url); info.setFileName("IRecord_" + i + ".apk"); ````` ##### 5.1 基本下载(添加任务Task与启动下载) ````` /** * 下载入口 * * @param downloadInfo * @param IDownloadProgress * @return 拥有Task的下载实体 */ LeopardHttp.DWONLOAD(info, new IDownloadProgress() { @Override public void onProgress(long key,long progress, long total, boolean done) { // Log.i("yuan onProgress", " progress : " + progress + "now total :" + total); // ... if (progress >= total && total != 0) { holder.downBtn.setText("重新開始"); holder.prgressTv.setText(holder.prgressTv.getText() + " 下載完成!"); } } @Override public void onSucess(String result) { // nothing.. } @Override public void onFailed(Throwable e, String reason) { // nothing.. } }); ````` ##### 5.2 DownLoadManager 单任务下载管理 ###### 5.2.1 开始下载 ````` // 开始下载 DownLoadManager.getManager().start(downloadinfo); ````` ###### 5.2.2 暂停下载 ````` DownLoadManager.getManager().pauseTask(info); ````` ###### 5.2.3 恢复下载 ````` DownLoadManager.getManager().resumeTask(info); ````` ###### 5.2.4 停止下载 ````` DownLoadManager.getManager().stopTask(info); ````` ###### 5.2.5 重新下载 ````` DownLoadManager.getManager().restartTask(downloadinfo); ````` ##### 5.3 DownLoadManager 多任务下载管理 ###### 5.3.1 删除所有下载任务 ````` DownLoadManager.getManager().removeAllTask(); ````` ###### 5.3.2 暂停所有任务 ````` DownLoadManager.getManager().pauseAllTask(); ````` ###### 5.3.3 停止所有任务 ````` DownLoadManager.getManager().stopAllTask(); ````` ###### 5.3.4 开始所有任务 ````` DownLoadManager.getManager().startAllTask(); ````` ## 使用方法(手动构建) 前面封装的单例模式LeopardHttp,是为了开发者可以更加方便调用,自动化构建好了LeopardClient对象并且配置了相对应需要的属性。不过还是那句话,为了能够让读者可以更加灵活配置LeopardClient,所以建议还是用构建者模式构建,可以根据需求再自定义拦截器或者自定义Factroy。 现在举例子手动构建的部分代码,目前支持的功能有: #### 1.基本请求 ##### 1.1 POST与 GET 键值对请求 ````` LeopardClient.Builder(mContext,ADDRESS) .build() .GET(context, enetity, httpRespondResult);//get请求 // .POST(context, enetity, httpRespondResult);//post请求 ````` ##### 1.2 POST与 GET 自定义Json请求 ````` LeopardClient.Builder(mContext,ADDRESS) .build() .GET(context, enetity, httpRespondResult);//get请求 // .POST(context, enetity, httpRespondResult);//post请求 ````` #### 2. 下载管理 ( 由DownLoadManager 管理) ````` DownLoadManager.getManager().addTask(downloadInfo,iDownloadProgress); ````` #### 3. 上传管理 ````` LeopardClient.Builder(mContedxt,ADDRESS) .addUploadFileFactory(UploadFileFactory.create()) .build() .upLoadFiles(uploadEnetity,iProgress); ````` -------------------------------------------------------------------------------