okhttp3基本用法
来源:互联网 发布:windows 10专业版下载 编辑:程序博客网 时间:2024/06/15 07:26
/** * Date:2016年9月7日下午10:37:11 * Copyright (c) 2016, www.bwbroad.com All Rights Reserved. * */package tools;import java.io.File;import java.io.IOException;import java.net.SocketTimeoutException;import java.util.Iterator;import java.util.Map;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.TimeUnit;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.Headers;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;import okhttp3.ResponseBody;/** * 基于okhttp3的工具类 <br/> * Date: 2016年9月7日 下午10:37:11 <br/> * 基本用法:<br/> * Http3 http=new Http3(); <br/> * String s= http.getString("www.baidu.com");<br/> * * @author xuejianxin */public class Http3 {private static final int TYPE_BYTE = 1;private static final int TYPE_STRING = 0;private int loadTimes;private int maxLoadTimes = 3;private OkHttpClient client = null;private Headers headers = null;private Headers.Builder hb = new Headers.Builder();public Http3() {client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).build();}/** * * 设置header<br/> * Date: 2016年9月12日 下午9:23:23 <br/> * * @author xuejianxin * @param headersParams */public void setHeaders(Map<String, String> headersParams) {if (headersParams != null) {Iterator<String> iterator = headersParams.keySet().iterator();String key = "";while (iterator.hasNext()) {key = iterator.next().toString();hb.add(key, headersParams.get(key));}}headers = hb.build();}/** * * Get 请求 返回string<br/> * Date: 2016年9月12日 下午5:16:14 <br/> * * @author xuejianxin * @param url * @return */public final byte[] getBytes(final String url) {Request.Builder requestBuilder = new Request.Builder().url(url);return (byte[]) call(requestBuilder, TYPE_BYTE);}/** * * Get 请求返回 bytes[]<br/> * Date: 2016年9月12日 下午5:16:32 <br/> * * @author xuejianxin * @param url * @return */public final String getString(final String url) {Request.Builder requestBuilder = new Request.Builder().url(url);return (String) call(requestBuilder, TYPE_STRING);}/** * * post请求 返回 byte<br/> * Date: 2016年9月12日 下午5:16:55 <br/> * * @author xuejianxin * @param url * @param parameters * @return */public final byte[] postFormBytes(final String url,final Map<String, String> parameters) {return (byte[]) post(url, parameters, TYPE_BYTE);}/** * * post请求 返回 string<br/> * Date: 2016年9月12日 下午5:16:55 <br/> * * @author xuejianxin * @param url * @param parameters * 参数 * @return */public final String postFormString(final String url,final Map<String, String> parameters) {return (String) post(url, parameters, TYPE_STRING);}/** * * 带附件的请求<br/> * Date: 2016年9月12日 下午5:18:52 <br/> * * @author xuejianxin * @param url * @param parameters * @param resultType * @return */public final Object postMultipart(final String url,final Map<String, String> parameters, Map<String, File> files,final int resultType) {MultipartBody.Builder mb = new MultipartBody.Builder().setType(MultipartBody.FORM);MediaType jpg = MediaType.parse("image/jpg");for (Map.Entry<String, String> en : parameters.entrySet()) {mb.addFormDataPart(en.getKey(), en.getValue());}for (Map.Entry<String, File> en : files.entrySet()) {mb.addFormDataPart(en.getKey(), en.getKey(),RequestBody.create(jpg, en.getValue()));}MultipartBody multipartBody = mb.build();Request.Builder requestBuilder = new Request.Builder().url(url).post(multipartBody);return call(requestBuilder, resultType);}/** * * 普通post 请求<br/> * Date: 2016年9月12日 下午5:18:12 <br/> * * @author xuejianxin * @param url * @param parameters * @param resultType * @return */private final Object post(final String url,final Map<String, String> parameters, final int resultType) {FormBody.Builder fb = new FormBody.Builder();for (Map.Entry<String, String> en : parameters.entrySet()) {fb.add(en.getKey(), en.getValue());}RequestBody formBody = fb.build();Request.Builder requestBuilder = new Request.Builder().url(url).post(formBody);return call(requestBuilder, resultType);}private final Object call(Request.Builder requestBuilder,final int resultType) {if (null != headers) {requestBuilder.headers(headers);}Request request = requestBuilder.build();ArrayBlockingQueue<Object> result = new ArrayBlockingQueue<Object>(1);loadTimes = 0;client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {if (e.getCause().equals(SocketTimeoutException.class)&& loadTimes < maxLoadTimes)// 如果超时并未超过指定次数,则重新连接{loadTimes++;client.newCall(call.request()).enqueue(this);} else {call.cancel();// 努力半天白费了 取消本次请求e.printStackTrace();}}@Overridepublic void onResponse(Call call, Response response)throws IOException {ResponseBody responseBody = null;try {responseBody = response.body();if (response.isSuccessful()) {Object o = null;if (resultType == TYPE_STRING) {o = responseBody.string();result.put(o);} else if (resultType == TYPE_BYTE) {o = responseBody.bytes();result.put(o);}}} catch (Exception e) {e.printStackTrace();} finally {if (null != responseBody) {responseBody.close();}}}});try {// return result.take();return result.poll(10, TimeUnit.SECONDS);// 一定要设置超时} catch (Exception e1) {e1.printStackTrace();}return null;}}
0 0
- okhttp3基本用法
- OkHttp3的基本用法
- OkHttp3 基本用法
- okhttp3用法
- OKhttp3的基本使用
- OKHTTP3 基本使用
- OkHttp3用法全解析
- OKHttp3用法介绍
- Android okhttp3的基本使用
- android Okhttp3的基本使用
- OkHttp3.0的基本使用
- OKhttp3.0的基本使用
- Android okhttp3的基本使用
- okHttp3的用法及介绍
- Android中的OkHttp3简单用法.
- OkHttp3
- OkHttp3
- OkHttp3
- 线程状态:分离状态(detached)与可结合状态(joinable)
- PAT (Top Level) Practise 1012Greedy Snake (35)
- |洛谷|动态规划|P1282 多米诺骨牌
- 独立按键的原理
- Android Studio使用远程依赖时下载不了jar包的解决方法
- okhttp3基本用法
- ubuntu系统添加jdk的环境变量
- jquery中parent()与parents()的比较
- 一道DP的思考题
- 导入旧数据需要 使用date插件
- Windows面试题知识一
- Canal快速开始
- nodejs基础 -- 回调函数
- 《浪潮之巅》 第五章 奔腾的芯 英特尔公司