okhttp3.x的post请求
趁下班前发一篇短文。
热衷于使用okhttp的理由,数据压缩率高,传输数据时省流量。
今天讲解下okhttp3.x的post请求的用法,get请求与okhttp2.x一样。
我下载的是okhttp3.4.1和okio1.9.0。post请求最常用的是带参数和带内容的数据传递,时间有限就讲这两种。
第一件要说的是连接网络,android的清单记得给权限。
第二件要说的是android一定要用开个线程请求网络,别阻塞UI线程。
1.带参数的post传输。
okhttp3.x用FormBody.Builder代替过去FormEncodingBuilder用法一样的。
事例:
FormBody.Builder params=new FormBody.Builder();params.add("data", "0");OkHttpClient okHttpClient=new OkHttpClient();Request request=new Request.Builder() .url(url).post(params.build()).build();Call call=okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onResponse(Call arg0, Response response) throws IOException { // 响应成功 response.body().string() 获取字符串数据,当然还可以获取其他 } @Override public void onFailure(Call arg0, IOException arg1) { // 响应失败 }
params中添加键值对。 然后new一个okhttpclient,再创建一个request,把url和post参数塞进request。Call.enqueue()方法可以直接链接网络了,而且可以回调给我们成功或失败。
2.带内容的post传输。
需要用到RequestBody
事例:
RequestBody body=RequestBody.create(MediaType.parse("text/html"),"1");OkHttpClient okHttpClient=new OkHttpClient();Request request=new Request.Builder().url(url).post(body).build();try {Response response=okHttpClient.newCall(request).execute();response.body().string(); //这里没有用call.enqueue方式连接,用了execute方式,都一样的,写法不一样而已,看个人喜欢} catch (IOException e) {e.printStackTrace();//响应失败了,进行响应操作}
这里RequestBody类有个工厂方法是create,里面放两个参数:
create(参数1,参数2)
参数1:数据类型,等于网页说的响应头最常见的是text/html,这是html网页的文本类型,还有application/json,这是json格式。
参数2:内容,支持的数据类型,byte[] ,String,ByteString,File。
以上是全部内容了,简单的post传输。
要注意一点的是,无论是带参数还是带内容,请求的方式上面提到了两种,重要的事情,再说一次,
第一种,call.enqueue加入call队列方式,可以调度,网络响应成功或失败都有回调
第二种,execute方式,这种方式快捷,没有什么回调,只要一个try/catch捕抓下异常,效果等同于第一种的回调接口。
最后做个搬运工个,okhttp3.4.1和okio1.9.0的jar包,附上链接。
http://download.csdn.net/detail/qq_29623203/9589007
更多相关文章
- android 原生系统服务定位实现
- Android:eclipse中导入项目无法编译,robotium 测试用例无法正确运
- [置顶] Android(安卓)中轴时光轴
- android圆角ImageView的几种实现方式
- 《第一行代码--Android》读书笔记之内容提供器
- Android的四大组件之三--Activity(4)----->Activity的启动方式和相
- Android网络请求库android-async-http使用
- Android(安卓)Eclipse 打包apk
- Android中网络传输不同内容