关于okhttp的二次封装
来源:互联网 发布:js回调函数的返回值 编辑:程序博客网 时间:2024/06/13 10:13
okhttp的二次封装,首先我们是要给他一个封装类:
/** * Created by 小亚 on 2017/9/6. * okhttp中级封装,实现两个功能,从服务端下载数据,从客户端提交数据 * 封装优秀的okhttp:okohttpUtils,OKGO(更深入的封装,研究okgo) * 节约内存,使所有的网络请求都用一个okhttpclient和handle对象 * 解决okhttp,网络请求成功,代码在子线程的问题,吧请求成功后的逻辑代码放到主线程中执行 * 简化代码 * <p> * 这次封装用到的知识点 * 1.单例模式 2.handler 3.接口 4.okhttp * <p> * 在使用单例模式时,构造方法一般权限私有,这样保证了对象的 */public class OKhttpManager { private static OkHttpClient okHttpClient; //////////////////////////////定义成员变量////////////////////////// private static Handler mHandler; private volatile static OKhttpManager sManager; ///////////////////////使用构造方法,完成初始化///////////////////// private OKhttpManager() { okHttpClient = new OkHttpClient(); mHandler = new Handler(); } /////////////使用道理模式,通过获取的的方式拿到对象//////////////////// public static OKhttpManager getIndtsnce() { OKhttpManager instance = null; if (sManager == null) { synchronized (OKhttpManager.class) { if (instance == null) { sManager = new OKhttpManager(); } } } return sManager; } /////////////////////////////////定义接口///////////////////////////// interface Func1 { void onResponse(String result); } interface Func2 { void onResponse(byte[] result); } interface Func3 { void onResponse(JSONObject result); } ///////////////使用handler,接口,保证处理数据的逻辑在主线程/////////////// //处理请求网络成功的方法,返回的结果是json字符串 private static void onsucessJsonStringMethod(final String jsonValue, final Func1 callBack) { //这里我用的是mHandler.post方法把数据放到主线程,你们以后可以用EventBus或RxJava的线程调度去完成 mHandler.post(new Runnable() { @Override public void run() { if (callBack != null) { try { callBack.onResponse(jsonValue); } catch (Exception e) { e.printStackTrace(); } } } }); } ////////处理图片的方法///////// private static void onsucessJsonStringphoto(final byte[] bye, final Func2 callBack) { //这里我用的是mHandler.post方法把数据放到主线程,你们以后可以用EventBus或RxJava的线程调度去完成 mHandler.post(new Runnable() { @Override public void run() { if (callBack != null) { try { callBack.onResponse(bye); } catch (Exception e) { e.printStackTrace(); } } } }); } /////////加载图片///////// public void photographURL(String url, final Func2 callBack) { final Request request = new Request.Builder().url(url).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (response != null && response.isSuccessful()) { onsucessJsonStringphoto(response.body().bytes(), callBack); // Bitmap bitmap= BitmapFactory.decodeByteArray(response.body().bytes(),0,response.body().bytes().length); } } }); } ///////////////////暴露提供给外界调用的方法///////////////// //请求指定的URL返回的结果是Json字符串 public void asyncjsonStringByUrl(String url, final Func1 callBack) { //简化代码 Request request = new Request.Builder().url(url).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { //判断response是否有对象,成功 if (response != null && response.isSuccessful()) { onsucessJsonStringMethod(response.body().string(), callBack); } } }); } ////////提交表单///////// public void sendComplexForm(String url, Map<String, String> params, final Func1 callBack) { //表单对象 FormBody.Builder form_builder = new FormBody.Builder(); //键值非空判断 if (params != null && params.isEmpty()) { for (Map.Entry<String, String> entry : params.entrySet()) { form_builder.add(entry.getKey(), entry.getValue()); } } FormBody request_body = form_builder.build(); final Request request = new Request.Builder().url(url).post(request_body).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { //判断response是否有对象,成功 if (response != null && response.isSuccessful()) { onsucessJsonStringMethod(response.body().string(), callBack); } } }); }}然后就是在主方法里面调用喽:
我们只需要在他的主方法的点击事件里面调用接口即可
oKhttpManager.asyncjsonStringByUrl(json_path, new OKhttpManager.Func1() { @Override public void onResponse(String result) { //在这里做存值的一些方法 }});
阅读全文
0 0
- 关于okhttp的二次封装
- OkHttp的二次封装
- okhttp的二次封装
- Okhttp的二次封装
- OkHttp的二次封装
- okhttp的二次封装
- OkHttp的二次封装
- okhttp的二次封装
- okhttp简单的二次封装
- 对okhttp的二次封装
- Okhttp的简单二次封装
- Okhttp简单的二次封装
- OkHttp的基本使用以及二次封装
- 安卓OKhttp的二次封装
- okhttp的二次封装(基本使用)
- okhttp的二次封装加入泛型
- Retrofit和OkHttp简单的二次封装
- okhttp二次封装
- Android 强引用,弱引用,软引用,虚引用
- Java多线程--并发集合框架概述
- Hbase伪分布式安装
- 技术文章 | 安卓开发笔记——探索EventBus
- setTimeout、setInterval。其第三个参数和this的讨论,超时嵌套和内存泄漏
- 关于okhttp的二次封装
- python 发送邮件(3) 多人 带附件
- VC2008出现warningC4996的解决方法
- Swift 中的关键字 final和super
- 从菜鸟到架构师(二十六)
- RPC 测试报错Unkown protocol(com.boco.hadoop.client.LoginServiceInterface)
- 正阅读微信小说分销系统-教程-如何申请模板消息
- QMatrix
- HTTP协议—— 简单认识TCP/IP协议