OkHttp使用学习

1、同步请求和异步请求

同步就是在当前主线程进行操做,而异步就是子线程。若是是同步的,在网络请求结束后,才会去进行下面的代码;而异步是,开启网络请求后,代码会继续执行下去。网络请求同步进行。
若是要经过结果才能继续接下来的代码的,那就用同步,若是只是发送网络请求,在以后的代码并无紧密关联,异步就能够了。访问网络通常都是异步,不然很容易anr。json

2、Get和Post请求

一、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();

二、post

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

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

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

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

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

但发送表单数据时,通常采用FormBody来建立请求体:ui

HashMap<String,String> 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();
相关文章
相关标签/搜索