博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OkHttp使用学习
阅读量:5020 次
发布时间:2019-06-12

本文共 2359 字,大约阅读时间需要 7 分钟。

一、同步请求和异步请求

同步就是在当前主线程进行操作,而异步就是子线程。如果是同步的,在网络请求结束后,才会去进行下面的代码;而异步是,开启网络请求后,代码会继续执行下去。网络请求同步进行。

如果要通过结果才能继续接下来的代码的,那就用同步,如果只是发送网络请求,在之后的代码并没有紧密关联,异步就可以了。访问网络一般都是异步,否则很容易anr。

二、Get和Post请求

1、Get

OkHttpClient Client = new OkHttpClient();                                Request request = new Request.Builder()        .url("https://xxxxxxxxxxxxx")        .build();                                                                Call call = Client.newCall(request);  //Get异步请求call.enqueue(new Callback()                                                      {    @Override    public void onFailure(Call call, IOException e) {        Log.e("OkHttp ",e.toString());    }    @Override    public void onResponse(Call call, Response response) throws IOException {        Log.e("OkHttp ", response.body().string());        response.close();    }});//或同步请求,可以得到response返回值Response response=call.execute();Log.e("OkHttp ", response.body().string());response.close();

2、post

//传入json格式的Http协议中的请求体String json = "{'name':'Bowling'}";RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);         //1.5、Request request = new Request.Builder()        .url(url)        .post(body)        .build();                                                                                        //2、Call call = client.newCall(request);                                                                    //3、Response response=call.execute();Log.e("OkHttp ",response.body().string());response.close();

常用的MIME类型,在一些协议的消息头中叫做“Content-Type”,常用的有:

(1)application/json:JSON格式的数据

(2)application/x-www-form-urlencoded:最常见的请求格式,原生form表单请求结构,以键值对的形式传递默认会以这种方式

(3)multipart/form-data:常见的 POST 数据提交的方式。这种方式一般用来上传文件,一般会生成一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 mutipart/form-data 来编码,本次请求的 boundary是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束表单数据。

但发送表单数据时,一般采用FormBody来创建请求体:

HashMap
paramsMap=new HashMap<>();paramsMap.put("name","哈哈");paramsMap.put("client","Android");FormBody.Builder builder = new FormBody.Builder();for (String key : paramsMap.keySet()) { //追加表单信息 builder.add(key, paramsMap.get(key));}RequestBody formBody=builder.build();

 

转载于:https://www.cnblogs.com/lcx20190724xxz/p/11237152.html

你可能感兴趣的文章
代码说明call和apply方法的区别 (咱们这方面讲解的少,这样的题有变式,需要举例讲解一下)...
查看>>
T-SQL 类型转换
查看>>
在eclipse中设计BPMN 2.0工作流定义的根本步骤
查看>>
Json对象与Json字符串互转(4种转换方式)
查看>>
PAT甲级1002 链表实现方法
查看>>
查看Linux信息
查看>>
Python中sys模块sys.argv取值并判断
查看>>
【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)
查看>>
并查集
查看>>
ubuntu 11.04下android开发环境的搭建!
查看>>
Bzoj 3343: 教主的魔法
查看>>
括号序列(栈)
查看>>
一件趣事
查看>>
DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
查看>>
atom 调用g++编译cpp文件
查看>>
H3C HDLC协议特点
查看>>
iptables 网址转译 (Network address translation,NAT)
查看>>
ios __block typeof 编译错误解决
查看>>
android 插件形式运行未安装apk
查看>>
ios开发之 manage the concurrency with NSOperation
查看>>