简单okHttpUtils封装
来源:互联网 发布:淘宝天猫电器城 编辑:程序博客网 时间:2024/06/06 04:46
不说废话,直接上代码(okHttpUtils)
package com.weijinran.wjr_library.utils;import android.os.Handler;import android.os.Looper;import java.io.IOException;import java.util.concurrent.TimeUnit;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/** * Created by weijinran ,Email 994425089@qq.com,on 2017/10/18. * Describe:网络请求 * PS: Not easy to write code, please indicate. */public class OkHttpUtils { private static final String BASE_URL = ""; /** * 网络访问要求singleton */ private static OkHttpUtils instance; // 必须要用的okhttpclient实例,在构造器中实例化保证单一实例 private OkHttpClient mOkHttpClient; public static final MediaType JSON = MediaType. parse("application/json; charset=utf-8"); private Handler mHandler; private OkHttpUtils() { /** * okHttp3中超时方法移植到Builder中 */ mOkHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build(); mHandler = new Handler(Looper.getMainLooper()); } public static OkHttpUtils getInstance() { if (instance == null) { synchronized (OkHttpUtils.class) { if (instance == null) { instance = new OkHttpUtils(); } } } return instance; } /** * 对外提供的Get方法访问 * * @param requestname * @param listener */ public void Get(String requestname, ResultCallBackListener listener) { /** * 通过url和GET方式构建Request */ Request request = bulidRequestForGet(BASE_URL + requestname); /** * 请求网络的逻辑 */ requestNetWork(requestname, request, listener); } /** * 对外提供的Post方法访问 * * @param requestname * @param body: 提交内容为表单数据 * @param listener */ public void PostWithFormData(String requestname, FormBody.Builder body, ResultCallBackListener listener) { /** * 通过url和POST方式构建Request */ Request request = bulidRequestForPostByForm(BASE_URL + requestname, body); /** * 请求网络的逻辑 */ requestNetWork(requestname, request, listener); } /** * 对外提供的Post方法访问 * * @param requestname * @param json: 提交内容为json数据 * @param listener */ public void PostWithJson(String requestname, String json, ResultCallBackListener listener) { /** * 通过url和POST方式构建Request */ Request request = bulidRequestForPostByJson(BASE_URL + requestname, json); /** * 请求网络的逻辑 */ requestNetWork(requestname, request, listener); } /** * 对外提供的Post方法访问 * * @param requestname * @param body 提交内容为文件数据 * @param listener */ public void PostWithFile(final String requestname, MultipartBody.Builder body, ResultCallBackListener listener) { /** * 通过url和POST方式构建Request */ Request request = bulidRequestForPostByFile(BASE_URL + requestname, body); /** * 请求网络的逻辑 */ requestNetWork(requestname, request, listener); } /** * POST方式构建Request {File} * * @param url * @param body * @return */ private Request bulidRequestForPostByFile(String url, MultipartBody.Builder body) { RequestBody requestBody = body.build(); return new Request.Builder() .url(url) .post(requestBody) .build(); } /** * POST方式构建Request {json} * * @param url * @param json * @return */ private Request bulidRequestForPostByJson(String url, String json) { RequestBody body = RequestBody.create(JSON, json); return new Request.Builder() .url(url) .post(body) .build(); } /** * POST方式构建Request {Form} * * @param url * @param body * @return */ private Request bulidRequestForPostByForm(String url, FormBody.Builder body) { RequestBody requestBody = body.build(); return new Request.Builder() .url(url) .post(requestBody) .build(); } /** * GET方式构建Request * * @param url * @return */ private Request bulidRequestForGet(String url) { return new Request.Builder() .url(url) .get() .build(); } private void requestNetWork(final String requestname, final Request request, final ResultCallBackListener listener) { /** * 判断网络是否连接 */ if (!NetworkUtils.isConnected()) { listener.noNetWork(); return; } /** * 加载前 */ listener.onLoadingShow(); /** * 处理连网逻辑,此处只处理异步操作enqueue */ mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { //使用handler返回UI线程 mHandler.post(new Runnable() { @Override public void run() { listener.onFailure(requestname, e); /** * 数据加载后 */ listener.onLoadingDismiss(); } }); } @Override public void onResponse(Call call, final Response response) throws IOException { final String result_str = response.body().string(); //使用handler返回UI线程 mHandler.post(new Runnable() { @Override public void run() { if (response.isSuccessful()) { listener.onSuccess(requestname, result_str); } else { listener.onError(requestname, result_str); } /** * 数据加载后 */ listener.onLoadingDismiss(); } }); } }); }}下面是回调的接口(ResultCallBackListener)
package com.weijinran.wjr_library.utils;/** * Created by weijinran ,Email 994425089@qq.com,on 2017/10/18. * Describe:网络请求回调接口 * PS: Not easy to write code, please indicate. */public interface ResultCallBackListener { void noNetWork(); void onLoadingShow(); void onLoadingDismiss(); void onSuccess(String requestname, String result_str); void onFailure(String requestname, Exception e); void onError(String requestname, String result_str);}
阅读全文
0 0
- 简单okHttpUtils封装
- 超简单的okHttpUtils封装(下)
- okhttpUtils的简单使用以及封装
- okhttputils封装
- 封装封装OkHttpUtils
- 基于OkHttpUtils网络请求的二次封装(简单版)
- Okhttputils终极封装
- OkHttpUtils进一步的封装
- OkHttpUtils的封装
- OkHTTPUTILS的封装
- 已封装了的OkHttpUtils
- NetCallBack 泛型封装 + okhttputils封装
- MVP + okHttpUtils的简单实践
- OkHttpUtils - 封装了okhttp的网络框架
- OkHttpUtils - 封装了okhttp的网络框架
- OkHttpUtils - 封装了okhttp的网络框架
- OkHttpUtils - 封装了okhttp的网络框架
- 基于OkHttpUtils再次封装代码最简化
- AMD ryzen fedora26 安装Nvidia驱动
- HashMap的底层学习
- word-break Java code
- 阿里云ECS使用vnc远程连接
- 细谈select函数(C语言)
- 简单okHttpUtils封装
- Matlab GUI,坐标轴控件,画sin函数
- 图像和流媒体 -- 帧率、分辨率、码流的概念和关系
- 汪学明老师简介
- HDU 1875-通畅工程再续
- OKhttp
- Haskell lesson:实现Graham扫描算法
- 安装pycharm
- ubuntu 下面 wget的文件夹解压下来无法访问问题解决