Okhttp工具类封装
来源:互联网 发布:新百伦淘宝店 编辑:程序博客网 时间:2024/05/04 09:53
废话不多讲,直接上代码
package zhangxuelei1506d.utitls;import android.os.Handler;import org.json.JSONObject;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * Created by Administrator on 2017/9/6. * 1、okhttp的中级封装 实现两个功能 从服务器下载数据 从客户端提交数据 * 封装优秀的okhttp:okhttputils,okgo(更深入的封装研究okgo) * 2、节约内存,使所有的网络请求都用一个okhttpclient和handler对象 * 3、解决okhttp网络请求成功代码在子线程中的问题,把请求成功后的逻辑代码放到主线程中执行 * 简化代码量, * 知识点: 1、单例模式()2、handler 3、接口 4、okhttp */public class OkHttpManager { public OkHttpClient mClient; //定义成员变量 public OkHttpClient okHttpClient; public static Handler mhandler; public volatile static OkHttpManager sManagerr; //使用构造方法完成初始化 私有化操作 private OkHttpManager() { mClient = new OkHttpClient(); mhandler = new Handler(); } //使用单例模式通过获取的方式拿到对象 public static OkHttpManager getinstance() { OkHttpManager instance = null; if (sManagerr == null) { synchronized (OkHttpManager.class) { if (instance == null) { instance = new OkHttpManager(); sManagerr = instance; } } } return sManagerr; } //定义接口 public interface Func1 { void onRespense(String resule); } public interface Func2 { void onResponse(byte[] result); } interface Func3 { void onResponse(JSONObject jsonObject); } //使handler接口保证 处理数据的逻辑在主线程中 //处理请求网络成功的方法,返回的结果是json字符串 private static void onsuccessjsonStringMethod(final String jsonValue, final Func1 callBack) { mhandler.post(new Runnable() { @Override public void run() { if (callBack != null) { try { callBack.onRespense(jsonValue); } catch (Exception e) { e.printStackTrace(); } } } }); } //处理请求网络成功的方法,返回的结果是字节 private static void onsuccessjsonStringMethod(final byte[] bytes, final Func2 callBack) { mhandler.post(new Runnable() { @Override public void run() { if (callBack != null) { try { callBack.onResponse(bytes); } catch (Exception e) { e.printStackTrace(); } } } }); } //暴漏提供给外界调用的方法 /** * 请求指定的url返回的结果是json字符串 */ public void asyncjsonstringByurl(String url, final Func1 callBack) { Request request = new Request.Builder().url(url).build(); mClient.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()) { onsuccessjsonStringMethod(response.body().string(), callBack); } } }); } //提交表单 public void sendComplexFrom(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 formBody = form_builder.build(); Request request = new Request.Builder().url(url).post(formBody).build(); mClient.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()) { onsuccessjsonStringMethod(response.body().string(), callBack); } } }); } //下载图片 public void LoadImage(String url, final Func2 callBack){ Request request = new Request.Builder().url(url).build(); mClient.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()) { onsuccessjsonStringMethod(response.body().bytes(),callBack); } } }); }}
阅读全文
0 0
- Okhttp工具类封装
- Okhttp封装工具类
- 封装OkHttp工具类
- okhttp封装工具类
- 封装OKHttp,工具类
- OKhttp二次封装工具类
- OkHttp网络连接封装工具类
- 非常简单的OKhttp封装工具类
- okhttp传输封装的工具类
- OkHttp网络连接封装工具类
- Android Okhttp工具类的封装
- OkHttp使用及工具类封装
- OkHttp工具类简单封装运用
- OkHttp网络连接封装工具类以及json转换类
- OKhttp的封装工具类(可以直接使用)
- 以OKHttp为基础封装网络请求工具类
- 超简单的okhttp封装工具类(上)
- 自己简单的封装一个OKHttp工具类
- MATLAB的images用法
- 【英语美文】妥协 —— compromise will last for lifetime
- 图布斯出纳管理系统企业版下载 官方版
- 用faster-rcnn训练自己的数据集(VOC2007格式,python版)
- 每日一题--数组中只出现一次的数字
- Okhttp工具类封装
- Gauge中文文档(5)—语法
- 第31节:unittest基本介绍
- js中字符串类型转化toString、parseInt、parseFloat、Number
- MySQL
- 运维知识体系V2.0-赵班长
- 解决:The user operation is waiting for "Building workplace" to complete
- github学习
- TLS/SSL 协议详解 (27) SSL 随机数的作用