OkHttp简单功能封装
来源:互联网 发布:国密算法标准 编辑:程序博客网 时间:2024/06/07 05:45
之前写了一个小程序,里面用到了许多的OkHttp的方法,每次使用get或post请求都要写一大段,而且大部分是重复的,所以自己写了一个简单的类来封装OkHttp的一些常用方法,后续会根据自己用到的方法来不断的增加。下面是代码,修改一下包名可以直接用,记得添加依赖( compile ‘com.squareup.okhttp:okhttp:2.5.0’)。
package zcx14.nju.tool;import android.util.Log;import android.widget.ImageView;import com.squareup.okhttp.Callback;import com.squareup.okhttp.FormEncodingBuilder;import com.squareup.okhttp.Interceptor;import com.squareup.okhttp.MediaType;import com.squareup.okhttp.OkHttpClient;import com.squareup.okhttp.Request;import com.squareup.okhttp.RequestBody;import java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.concurrent.TimeUnit;/** * Created by zcx on 2017/6/26. * 说明:常用的OkHttp方法的封装,对于有必要说明的参数,用@param标识了 */public class OkHttp_Simple { private OkHttpClient client; private Map<String, String> params; private boolean jsonParams; public OkHttp_Simple() { //初始化,设置一些默认属性 reset(); } /** * 重置,清空参数,属性设为默认值 * */ public void reset() { client = new OkHttpClient(); params = new HashMap<>(); jsonParams = false; //默认的连接超时时间 client.setConnectTimeout(10, TimeUnit.SECONDS); //默认的读取超时时间 client.setReadTimeout(10, TimeUnit.SECONDS); } /** * 设置post的参数使用json格式,默认keyvalue格式 * */ public void setJsonParams() { jsonParams = true; } /** * 设置连接超时时间,参数为时间数和单位 */ public OkHttp_Simple setConnectTimeout(int num, TimeUnit unit) { client.setConnectTimeout(num, unit); return this; } /** * 设置读取超时时间,参数为时间数和单位 * */ public OkHttp_Simple setReadTimeOut(int num, TimeUnit unit) { client.setReadTimeout(num, unit); return this; } /** * 设置参数,参数的键值规定为String * */ public OkHttp_Simple addParameter(String key, String value) { params.put(key, value); return this; } /** * 添加拦截器 * */ public OkHttp_Simple addInterceptor(Interceptor interceptor) { client.networkInterceptors().add(interceptor); return this; } /** * 异步的的get方法,如果有参数,就通过直接在url后添加的方式添加 */ public void asynGet(String url, Callback callback) { //如果有参数执行 if(params.size() != 0) { url += "?"; //将参数添加到http请求的末尾 Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry<String, String> next = iterator.next(); url += next.getKey() + "=" + next.getValue(); if(iterator.hasNext()) { url += "&"; } } //清空参数 params = new HashMap<>(); } //发送请求 Request request = new Request.Builder().url(url).build(); client.newCall(request).enqueue(callback); reset(); } /** * 异步的post方法 */ public void asynPost(String url, Callback callback) { RequestBody body = null; if(jsonParams) { String value = "{"; Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry<String, String> next = iterator.next(); value += "\"" + next.getKey() + "\":\"" + next.getValue() + "\""; if(iterator.hasNext()) { value += ","; } } value += "}"; //清空参数 params = new HashMap<>(); MediaType json = MediaType.parse("application/json; charset=utf-8"); body = RequestBody.create(json, value); } else { FormEncodingBuilder form = new FormEncodingBuilder(); //如果有参数,就加进requestbody Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry<String, String> next = iterator.next(); form.add(next.getKey(), next.getValue()); } //清空参数 params = new HashMap<>(); body = form.build(); } Request request = new Request.Builder().post(body).url(url).build(); client.newCall(request).enqueue(callback); reset(); } /** * 同步的get方法(在主线程中使用会抛异常,尽量使用异步吧) * */ public String synGet(String url) throws IOException{ //如果有参数执行 if(params.size() != 0) { url += "?"; //将参数添加到http请求的末尾 Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry<String, String> next = iterator.next(); url += next.getKey() + "=" + next.getValue(); if(iterator.hasNext()) { url += "&"; } } //清空参数 params = new HashMap<>(); } //发送请求 Request request = new Request.Builder().url(url).build(); String result = client.newCall(request).execute().body().string(); reset(); return result; } /** * 同步的post方法(在主线程中使用会抛异常,尽量使用异步吧) */ public String synPost(String url) throws IOException { FormEncodingBuilder form = new FormEncodingBuilder(); //如果有参数,就加进requestbody Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry<String, String> next = iterator.next(); form.add(next.getKey(), next.getValue()); } //清空参数 params = new HashMap<>(); RequestBody body = form.build(); Request request = new Request.Builder().post(body).url(url).build(); String result = client.newCall(request).execute().body().string(); reset(); return result; }}
方法的用法说明在方法上都有注释了。
这个封装类为OkHttp设置了一些基本的默认值,包括连接超时时间,读取超时时间。可以设置拦截器来设置request或response的属性,支持同步或异步的get和post方法。其中post的参数支持json格式或者keyvalue格式,只要通过setJsonParams()方法来设置就行了。添加参数使用addParameter方法(无论是get还是post)。要清空参数或者将属性重置为默认值,调用reset()方法
后续会继续添加下载/上传文件的方法,还有简单设置request和response属性(封装拦截器代码)的方法。
阅读全文
0 0
- OkHttp简单功能封装
- okhttp的简单封装
- OkHTTp简单封装
- okHttp简单封装使用
- OkHttp简单封装
- OkHttp的简单封装
- 简单封装okhttp
- okhttp的简单封装
- okhttp简单封装
- 简单的封装okhttp
- OkHttp简单封装
- OKhttp简单封装
- OKHTTP的简单封装
- 非常简单封装Okhttp
- okhttp简单封装
- okhttp的简单封装
- okhttp简单封装+使用
- 简单的okhttp封装
- 分治法--快速排序
- Java+Selenium3方法篇26-处理Alert弹窗
- containsKey方法——判断是否包含指定的键名
- [搬萝卜 & 取水果]
- 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variabl
- OkHttp简单功能封装
- 算法分析课每周练习 Merge k Sorted Lists
- JSP四种属性范围
- RocketMQ命令整理
- jQuery中对数组的值进行去重处理
- 开篇Markdonw
- jdk-ThreadPoolExecutor(三)---内部Worker和执行方法
- 牛客华为机试题刷题笔记(二)
- Spring框架