基于okhttp的简单封装
来源:互联网 发布:世界观 知乎 编辑:程序博客网 时间:2024/05/17 03:41
/** * Created by zhaozhe on 2017/6/5/005. */public class OKHttpManager { private volatile static OKHttpManager manager; //防止多个线程访问时 private final String TAG = OKHttpManager.class.getSimpleName(); //获得类名 private Handler handler; private static final String BASE_URL = "http://xxx.com/openapi";//请求接口根地址 private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8");//mdiatype 这个需要和服务端保持一致 private static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8");//mdiatype 这个需要和服务端保持一致 private OkHttpClient mOkHttpClient;//okHttpClient 实例 public static final int TYPE_GET = 0;//get请求 public static final int TYPE_POST_JSON = 1;//post请求参数为json public static final int TYPE_POST_FORM = 2;//post请求参数为表单 private OKHttpManager() { //初始化OkHttpClient mOkHttpClient = new OkHttpClient().newBuilder() .connectTimeout(10, TimeUnit.SECONDS)//设置超时时间 .readTimeout(10, TimeUnit.SECONDS)//设置读取超时时间 .writeTimeout(10, TimeUnit.SECONDS)//设置写入超时时间 .build(); handler = new Handler(Looper.getMainLooper()); } //采用单例模式获取对象 public static OKHttpManager getInstance() { OKHttpManager instance = null; if (manager == null) { synchronized (OKHttpManager.class) { //同步代码块 if (instance == null) { instance = new OKHttpManager(); manager = instance; } } } return instance; } /** * okHttp同步请求统一入口 * * @param actionUrl 接口地址 * @param requestType 请求类型 * @param json 请求参数 */ public void requestSync(String actionUrl, int requestType, String json) { switch (requestType) { case TYPE_GET: requestGetBySync(actionUrl); break; case TYPE_POST_JSON: requestPostBySync(actionUrl, json); break; case TYPE_POST_FORM:// requestPostBySynWithForm(actionUrl, paramsMap); break; } } /** * okHttp get同步请求 * * @param actionUrl 接口地址 */ private void requestGetBySync(String actionUrl) { StringBuilder tempParams = new StringBuilder(); try { //补全请求地址 String requestUrl = String.format("%s/%s?%s", BASE_URL, actionUrl); //创建一个请求 Request request = addHeaders().url(requestUrl).get().build(); //创建一个Call final Call call = mOkHttpClient.newCall(request); //执行请求 final Response response = call.execute(); response.body().string(); } catch (Exception e) { Log.e(TAG, e.toString()); } } /** * okHttp post同步请求 * * @param actionUrl 接口地址 * @param json 请求参数 */ private void requestPostBySync(String actionUrl, String json) { try { //补全请求地址 String requestUrl = String.format("%s/%s", BASE_URL, actionUrl); //创建一个请求实体对象 RequestBody RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, json); //创建一个请求 final Request request = addHeaders().url(requestUrl).post(body).build(); //创建一个Call final Call call = mOkHttpClient.newCall(request); //执行请求 Response response = call.execute(); //请求执行成功 if (response.isSuccessful()) { //获取返回数据 可以是String,bytes ,byteStream Log.e(TAG, "response ----->" + response.body().string()); } } catch (Exception e) { Log.e(TAG, e.toString()); } } /** * 统一为请求添加头信息 * * @return */ private Request.Builder addHeaders() { Request.Builder builder = new Request.Builder() .addHeader("Connection", "keep-alive") .addHeader("platform", "2") .addHeader("phoneModel", Build.MODEL) .addHeader("systemVersion", Build.VERSION.RELEASE) .addHeader("appVersion", "3.2.0"); return builder; } /** * okHttp post同步请求表单提交 * * @param actionUrl 接口地址 * @param paramsMap 请求参数 */ private void requestPostBySynWithForm(String actionUrl, HashMap<String, String> paramsMap) { try { //创建一个FormBody.Builder FormBody.Builder builder = new FormBody.Builder(); for (String key : paramsMap.keySet()) { //追加表单信息 builder.add(key, paramsMap.get(key)); } //生成表单实体对象 RequestBody formBody = builder.build(); //补全请求地址 String requestUrl = String.format("%s/%s", BASE_URL, actionUrl); //创建一个请求 final Request request = addHeaders().url(requestUrl).post(formBody).build(); //创建一个Call final Call call = mOkHttpClient.newCall(request); //执行请求 Response response = call.execute(); if (response.isSuccessful()) { Log.e(TAG, "response ----->" + response.body().string()); } } catch (Exception e) { Log.e(TAG, e.toString()); } } /** * okHttp异步请求统一入口 * * @param actionUrl 接口地址 * @param requestType 请求类型 * @param json 请求参数 * @param callBack 请求返回数据回调 * @param <T> 数据泛型 **/ public <T> Call requestAsyn(String actionUrl, int requestType, String json, ReqCallBack<T> callBack) { Call call = null; switch (requestType) { case TYPE_GET: call = requestGetByAsyn(actionUrl,callBack); break; case TYPE_POST_JSON: call = requestPostByAsyn(actionUrl, json, callBack); break; case TYPE_POST_FORM:// call = requestPostByAsynWithForm(actionUrl, paramsMap, callBack); break; } return call; } /** * okHttp get异步请求 * * @param actionUrl 接口地址 * @param callBack 请求返回数据回调 * @param <T> 数据泛型 * @return */ private <T> Call requestGetByAsyn(String actionUrl, final ReqCallBack<T> callBack) { try { String requestUrl = String.format("%s/%s?%s", BASE_URL, actionUrl); final Request request = addHeaders().url(requestUrl).get().build(); final Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { failedCallBack("访问失败", callBack); Log.e(TAG, e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String string = response.body().string(); Log.e(TAG, "response ----->" + string); successCallBack((T) string, callBack); } else { failedCallBack("服务器错误", callBack); } } }); return call; } catch (Exception e) { Log.e(TAG, e.toString()); } return null; } /** * okHttp post异步请求 * * @param actionUrl 接口地址 * @param json 请求参数 * @param callBack 请求返回数据回调 * @param <T> 数据泛型 * @return */ private <T> Call requestPostByAsyn(String actionUrl, String json, final ReqCallBack<T> callBack) { try { RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, json); String requestUrl = String.format("%s/%s", BASE_URL, actionUrl); final Request request = addHeaders().url(requestUrl).post(body).build(); final Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { failedCallBack("访问失败", callBack); Log.e(TAG, e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String string = response.body().string(); Log.e(TAG, "response ----->" + string); successCallBack((T) string, callBack); } else { failedCallBack("服务器错误", callBack); } } }); return call; } catch (Exception e) { Log.e(TAG, e.toString()); } return null; } /** * okHttp post异步请求表单提交 * * @param actionUrl 接口地址 * @param paramsMap 请求参数 * @param callBack 请求返回数据回调 * @param <T> 数据泛型 * @return */ private <T> Call requestPostByAsynWithForm(String actionUrl, HashMap<String, String> paramsMap, final ReqCallBack<T> callBack) { try { FormBody.Builder builder = new FormBody.Builder(); for (String key : paramsMap.keySet()) { builder.add(key, paramsMap.get(key)); } RequestBody formBody = builder.build(); String requestUrl = String.format("%s/%s", BASE_URL, actionUrl); final Request request = addHeaders().url(requestUrl).post(formBody).build(); final Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { failedCallBack("访问失败", callBack); Log.e(TAG, e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String string = response.body().string(); Log.e(TAG, "response ----->" + string); successCallBack((T) string, callBack); } else { failedCallBack("服务器错误", callBack); } } }); return call; } catch (Exception e) { Log.e(TAG, e.toString()); } return null; } /** * 统一同意处理成功信息 * * @param result * @param callBack * @param <T> */ private <T> void successCallBack(final T result, final ReqCallBack<T> callBack) { handler.post(new Runnable() { @Override public void run() { if (callBack != null) { callBack.onReqSuccess(result); } } }); } /** * 统一处理失败信息 * * @param errorMsg * @param callBack * @param <T> */ private <T> void failedCallBack(final String errorMsg, final ReqCallBack<T> callBack) { handler.post(new Runnable() { @Override public void run() { if (callBack != null) { callBack.onReqFailed(errorMsg); } } }); } public interface ReqCallBack<T> { /** * 响应成功 */ void onReqSuccess(T result); /** * 响应失败 */ void onReqFailed(String errorMsg); }}
阅读全文
0 0
- 基于okhttp的简单封装
- okhttp的简单封装
- OkHttp的简单封装
- okhttp的简单封装
- 简单的封装okhttp
- OKHTTP的简单封装
- okhttp的简单封装
- 简单的okhttp封装
- 简单的封装Okhttp
- 简单的封装okhttp
- 基于OKhttp的MVP封装
- okhttp简单的二次封装
- OKHttp的简单封装类
- okHttp的简单封装使用
- Okhttp 简单的网络封装
- Okhttp的简单二次封装
- Okhttp简单的二次封装
- 对okhttp的简单封装
- 在Windows7上搭建Cocos2d-x win32开发环境
- 安卓平台有哪些好的时间管理软件
- 最大似然估计(Maximum likelihood estimation)
- Angular及其他前端常见问题总结
- iOS多线程GCD的一些笔记
- 基于okhttp的简单封装
- php开启openssl的方法,openssl安装
- Nginx错误:[emerg] getpwnam(“www”) failed
- Android 中使用OpenGL ES进行2D开发(纹理Texture使用)
- Android开发实现用户头像更换
- 基础——机器学习
- 推荐尽可能看Paul Deitel的英文原著《C how to Program, Sixth Edition》
- JavaWeb 修炼之路(五)服务器中的请求和响应
- React基础记录