OKHttp的简单使用
一方面,最近关于OKHttp的讨论甚嚣尘上,另一方面,我最近也更新了android6.0,发现在6.0中HttpClient不能使用了,于是决定抽时间也看一下OKHttp,总结了一点东西,与大家分享。
以前读书的时候在学校用过GitHub上的一个开源控件AsyncHttpClient,当时解决了不少问题,上传图片以及download都能实现,感觉还不错,这次看完OKHttp,暂未发现两者在功能上的差异(如果哪位小伙伴发现了可以告诉我一下)。
官网对OKHttp的介绍还是比较详细,英文好的同学可以直接看官网的内容。使用OKHttp我们就需要OKHttp的jar包,同时由于OKHttp依赖于Okio,我们也需要下载Okio的jar包。这两个准备工作做好了就可以开始了。
一、发送Get请求
Request是OKHttp访问的请求,Callback是回调,有两种调用方式,一种是call.execute,这种方式不会开启新的线程,要在android中使用这个需要自己开启一个新线程,然后在线程中调用这个东西,这样反而麻烦了,所以个人推荐使用call.enqueue,call.enqueue会开启一个新的线程,在新线程中调用网络请求。这样的话我们就得通过Handler来与android UI交互了。
okHttpClient = new OkHttpClient(); request = new Request.Builder().url(HTTPURL).build(); Call call = okHttpClient.newCall(request); // 开启异步线程访问网络 call.enqueue(new Callback() { @Override public void onResponse(Response response) throws IOException { String res = response.body().string(); Message msg = new Message(); msg.what = REFRESHDATA; msg.obj = res; mHandler.sendMessage(msg); } @Override public void onFailure(Request arg0, IOException arg1) { } });
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
二、发送POST请求
发送POST请求,一种是提交JSON数据:
MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(JSON, "{\"username\":\"lisi\",\"nickname\":\"李四\"}"); Request request = new Request.Builder().url(HTTPURL).post(body).build(); //后面的调用与GET相同
- 1
- 2
- 3
- 4
- 5
还有一种是提交键值对:
RequestBody formBody = new FormEncodingBuilder() .add("username", "lisi").add("nickname", "李四").build(); Request request = new Request.Builder().url(HTTPURL).post(formBody) .build();
- 1
- 2
- 3
- 4
总结
其实OKHttp相对于HttpURLConnection已经简单了许多,但是我还是觉得麻烦,而且官方亦不建议我们创建多个OkHttpClient实例,于是又对它进行了一层简单的封装。
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
/**
* OKHttp封装工具类
*
* @author wangsong
*
* 2015-10-9
*/
public class OKHttpUtils { private final static OkHttpClient M_OK_HTTP_CLIENT = new OkHttpClient(); static { M_OK_HTTP_CLIENT.setConnectTimeout(30, TimeUnit.SECONDS); } /** * 不开启异步线程 * * @author wangsong 2015-10-9 * @param request * @return * @throws IOException */ public static Response execute(Request request) throws IOException { return M_OK_HTTP_CLIENT.newCall(request).execute(); } /** * 开启异步线程访问,访问结果自行处理 * * @author wangsong 2015-10-9 * @param request * @param responseCallback */ public static void enqueue(Request request, Callback responseCallback) { M_OK_HTTP_CLIENT.newCall(request).enqueue(responseCallback); } /** * 开启异步线程访问,不对访问结果进行处理 * * @author wangsong 2015-10-9 * @param request * @param responseCallback */ public static void enqueue(Request request) { M_OK_HTTP_CLIENT.newCall(request).enqueue(new Callback() { @Override public void onResponse(Response arg0) throws IOException { } @Override public void onFailure(Request arg0, IOException arg1) { } }); } /** * 为HttpGet请求拼接一个参数 * * @author wangsong 2015-10-9 * @param url * @param name * @param value */ public static String jointURL(String url, String name, String value) { return url + "?" + name + "=" + value; } /** * 为HttpGet请求拼接多个参数 * * @author wangsong 2015-10-9 * @param url * @param name * @param value */ public static String jointURL(String url, Map<String, String> values) { StringBuffer result = new StringBuffer(); result.append(url).append("?"); Set<String> keys = values.keySet(); for (String key : keys) { result.append(key).append("=").append(values.get(key)).append("&"); } return result.toString().substring(0, result.toString().length()-1); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
本文涉及到的工具类下载地址https://github.com/lenve/OKHttpUtils
文章来源: wangsong.blog.csdn.net,作者:_江南一点雨,版权归原作者所有,如需转载,请联系作者。
原文链接:wangsong.blog.csdn.net/article/details/49045765
- 点赞
- 收藏
- 关注作者
评论(0)