EasyHttp 基于OkHttp的网络请求框架
来源:互联网 发布:淘宝如何设置套餐价格 编辑:程序博客网 时间:2024/05/21 06:51
一、 引入项目
compile ‘com.liwy.easyhttp:easyhttp:1.0.7’
二、 初始化
在Application里初始化,主要初始化内容为统一解析回调和IHttpService实现类传入,具体如下:
// 实例化请求实现类 OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(20, TimeUnit.SECONDS).build(); RequestService requestService = new RequestService(okHttpClient); // 设置EasyHttp的功能实现类为okHttpService,post提交方式为form表单,数据解析方式为GSON EasyHttp.getInstance().initHttpService(requestService, Constants.MEDIA_TYPE_FORM,DataParser.PARSE_GSON);
如需自定义数据解析方式,需实现数据解析类的接口,并加入解析回调集合:
// 默认已实现两种解析方式GSON和xml // 也可以自定义解析方式,比如解析html类型的数据 DataParser.addCallback("html", new Callback() { @Override public void onSuccess(String result,SuccessCallback successCallback) { // do parsing which you want to } @Override public void onError(String error, ErrorCallback errorCallback) { // http error } });
三、 使用
目前共提供四种方法,如下:
1. get(EasyRequest req)
2. post(EasyRequest req)
3. download(EasyRequest req)
4. upload(EasyRequest req)
调用:EasyHttp.getInstance().post(req);
1、 get请求
Map<String, Object> params = new HashMap<>(); params.put("identity", "40283c825d2bca81015d2bcabe850000"); params.put("jsonKey", "test"); EasyRequest easyRequest = EasyHttp.getBuilder() .setUrl("http://192.168.131.19:8080/cnliwy/appdata/getTestData") .setParams(params) .setTag("testTag") .setSync(true) //设置本次请求为同步,默认为异步请求. .setSuccessCallback(new SuccessCallback<String>() { @Override public void success(String result) { System.out.println(result); tvContent.setText(result); } }) .build(); EasyHttp.getInstance().get(easyRequest);
参数也可不通过map直接传入,如下
EasyRequest easyRequest = EasyHttp.getBuilder() .setUrl("http://192.168.131.19:8080/cnliwy/appdata/getTestData") .addParam("identity", "40283c825d2bca81015d2bcabe850000") .addParam("jsonKey", "test") .setTag("testTag") .setSync(false) .setSuccessCallback(new SuccessCallback<String>() { @Override public void success(String result) { System.out.println(result); tvContent.setText(result); } }) .build();
如果需要在请求过程中取消该请求,可以如下操作:
EasyHttp.getInstance().cancelHttp("testTag");
2、post请求
EasyRequest easyRequest = EasyHttp.getBuilder() .setUrl("http://192.168.131.19:8080/cnliwy/appdata/getTestData") .addParam("identity", "40283c825d2bca81015d2bcabe850000") .addParam("jsonKey", "getDatas") .post() .setSuccessCallback(new SuccessCallback<List<Data>>() { @Override public void success(List<Data> result) { for (Data data : result){ System.out.println(data.getName()); } tvContent.setText("成功获取数据:" + result.toString()); } }) .setErrorCallback(new ErrorCallback() { @Override public void error(String errorMsg) { System.out.println("请求失败"); } }) .build(); EasyHttp.getInstance().http(easyRequest);
3、下载
String url = "http://img5q.duitang.com/uploads/item/201506/23/20150623203928_HzBWU.jpeg"; String filePath = Environment.getExternalStorageDirectory().getAbsolutePath().toString() + "/img"; String fileName = "moon.jpeg"; EasyRequest easyRequest = EasyHttp.getBuilder() .setUrl(url) .setFileName(fileName) .setTag(tag) .setSaveDir(filePath) .setDownloadCallback(new DownloadCallback<File>() { @Override public void onSuccess(File o) { System.out.println("---->下载成功" + o.getAbsolutePath()); } @Override public void onError(String err) { System.out.println("---->下载失败"); } @Override public void onProgress(long total, int progress) { tvContent.setText("已下载%" + progress); if(progress == 100)tvContent.setText("下载完成"); } }) .build(); EasyHttp.getInstance().download(easyRequest);
4、上传
// 参数 Map<String,Object> params = new HashMap<>(); params.put("title","upload head icon and apk"); params.put("uploadUser","cnliwy"); params.put("uploadType","image and apk"); List<EasyFile> files = getFiles(); EasyHttp.getBuilder().setUrl(url).setParams(params).setFiles(files).setSuccessCallback(new SuccessCallback() { @Override public void success(Object result) { System.out.println("上传成功," + result); contentTv.setText("上传成功," + result); } }).setErrorCallback(new ErrorCallback() { @Override public void error(String errorMsg) { System.out.println(values[0].toString()); contentTv.setText("上传失败"+ values[0].toString()); } }).postFile(); // 需要上传的文件 public List<EasyFile> getFiles(){ String filePath = Environment.getExternalStorageDirectory().getAbsolutePath().toString() + "/aliwy/"; List<EasyFile> files = new ArrayList<>(); files.add(new EasyFile("image1",filePath + "guide_one.png","image/png",new File(filePath + "guide_one.png"))); files.add(new EasyFile("image2",filePath + "guide_two.png","image/png",new File(filePath + "guide_two.png"))); return files; }
四 EasyRequest方法
- 必传
/** * 设置本次请求的url * @param url * @return */ public Builder setUrl(String url);
- 可选
/** * 传入context对象 * @param context * @return */ public Builder setContext(Context context); /** * 添加http的header集合 * @param headers * @return */ public Builder setHeaders(Map<String, String> headers); /** * 传入自定义的okhttpclient * @param okHttpClient * @return */ public Builder setOkHttpClient(OkHttpClient okHttpClient); /** * 设置用于取消本次请求的tag * @param tag * @return */ public Builder setTag(Object tag); /** * 添加请求参数集合 * @param params * @return */ public Builder setParams(Map<String, Object> params); /** * 添加请求参数和值 * @param key * @param value * @return */ public Builder addParam(String key,Object value); /** * 添加http的header信息 * @param key * @param value * @return */ public Builder addHeader(String key,String value); /** * 传入要上传的文件 * @param uploadFiles * @return */ public Builder setUploadFiles(List<EasyFile> uploadFiles) /** * 自定义requestbody数据,若用此方法,则setMediaTpe和setParam\setParams则不需设置 * @param requestBody * @return */ public Builder requestBody(RequestBody requestBody); /** * 设置post提交数据的mediaType类型,默认为form。需与服务器保持一致。 * @param mediaType form或json * @return */ public Builder setMediaType(String mediaType); /** * 设置本次请求为同步或异步。默认为异步。 * @param sync * @return */ public Builder setSync(boolean sync) ; /** * 设置本次的数据解析方式,xml解析或者gson解析,默认gson解析 * @param parseType xml或者gson,也可是自定义的解析类型。 * @return */ public Builder setParseType(String parseType); /** * 设置文件下载的存储路径 * @param saveDir * @return */ public Builder setSaveDir(String saveDir) ; /** * 设置文件的存储清楚,不传则默认采用下载链接里的文件名称。 * @param fileName * @return */ public Builder setFileName(String fileName); /** * 请求成功的结果回调 * @param successCallback * @return */ public Builder setSuccessCallback(SuccessCallback successCallback); /** * 请求失败的结果回调 * @param errorCallback * @return */ public Builder setErrorCallback(ErrorCallback errorCallback); /** * 下载的结果回调 * @param downloadCallback * @return */ public Builder setDownloadCallback(DownloadCallback downloadCallback);
EasyRequest.Builder使用注意
- EasyRequest.Builder里除了setUrl是必须的外,其余方法均根据具体情况选择性调用。
- 如果需自定义post的请求体,需调用requestBody();如果调用了此方法则不需再调用setParam和setMediaType
- 如需使当前请求为同步请求,需调用sync(true)
- addParam和setParams并不冲突,可同时调用,不会覆盖已传入参数。addHeader和setHeaders同理。
- 如果需要在网络请求中取消请求,需提前调用setTag()设置tag值,可通过调用EasyHttp.getInstance().cancelHttp(tag)取消请求。
- download方法,如果存储路径已存在该文件,则直接进入下载成功的回调。
- 目前数据解析已实现xml和gson两种方式。可通过setParseType(“xml”)主动设置本次请求的解析方式。
- 如果设置为同步请求则需在子线程里发起,目前同步请求尚不完善,不可用。(待完善)
更新日志
1.0.7(最新)
- 自定义EasyRequest请求体
- 删除OkHttpService和HttpProxyService
1.0.6
- 实现泛型类的自定义解析,解除对GSON的依赖
- 取消EasyHttp对IHttpService的实现,采用HttpProxyService代理类实现功能
- EasyHttp初始化方法更改为initHttpService,并新增两个参数,分别设置post请求的默认ContentType和默认的数据解析方式parseType
1.0.5
- 源码分为两个分支,其中release为发布版分支
- 清理release分支下retrofit的实现及依赖包
1.0.4
- 新增文件上传功能(OkHttpService已实现)
- OkHttpService实现主线程回调
- 新增可扩展数据解析回调,默认GSON解析
1.0.3
- 新增下载方法,OkHttpService和RetrofitService均已实现。
- EasyHttp新增获取Builder的静态方法
public static Builder getBuilder(): - 删除无用类
1.0.2
- 完善EasyHttp初始化方法
- 新增Http请求中断功能
- 修复bug.
1.0.1
- 1.0.1版本发布至Jcenter.
Github地址
源码传送门
阅读全文
0 0
- EasyHttp 基于OkHttp的网络请求框架
- 基于okhttp的网络请求
- okhttp网络请求框架
- 网络请求框架OKHttp
- OkHttp网络请求框架
- 网络请求okhttp框架
- OkHttp网络请求框架
- 网络请求 框架okhttp
- okhttp网络请求框架的简单使用
- Android网络请求框架的使用okhttp
- Okhttp最火的网络请求框架
- 网络请求框架okhttp的使用
- OkHttp网络请求框架的使用
- 基于HttpURLConnection的简单网络请求框架(开源),包含okhttp封装
- okHttp网络请求框架get请求的封装
- Retrofit+okhttp网络框架请求
- 集成OKHTTP的一个不错的网络请求框架
- Android 的OkHttp 网络请求框架的学习封装
- Linux 常用基本命令 rmdir rm
- Centos6.8通过yum安装mysql5.7
- 靠给员工画大饼,一口气创办10家公司身价过亿,吓傻周鸿祎!
- TEA加密算法与分组密码的ECB、CBC模式选定
- Linux基础之screen命令
- EasyHttp 基于OkHttp的网络请求框架
- 【Cookie】如何查询某个网站给你的Cookie?
- 1049. 数列的片段和(20)
- jquery正则表达式验证纠正版(手机号、身份证号、中文名称)
- 多线程按序执行
- Yii2.0 session的存取
- JS-IOS输入法遮挡输入框解决办法
- ant-design-mobile高清方案以及svg配置
- Android Studio 导入项目在Building gradle project info 时一直卡住