• OkHttp使用学习


    一、同步请求和异步请求

    同步就是在当前主线程进行操作,而异步就是子线程。如果是同步的,在网络请求结束后,才会去进行下面的代码;而异步是,开启网络请求后,代码会继续执行下去。网络请求同步进行。
    如果要通过结果才能继续接下来的代码的,那就用同步,如果只是发送网络请求,在之后的代码并没有紧密关联,异步就可以了。访问网络一般都是异步,否则很容易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<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();
  • 相关阅读:
    Spring Boot 自定义starter
    jvm中的年轻代 老年代 持久代 gc
    nginx反向代理服务器端口问题
    ACE Editor在线代码编辑器简介及使用引导
    Linux下MySQL 5.6.24的编译安装与部署
    C3p0的参数
    Mysql 查看连接数,状态
    linux下mysql定时备份数据库
    Mysql中存储方式的区别
    mysql常用语句
  • 原文地址:https://www.cnblogs.com/lcx20190724xxz/p/11237152.html
Copyright © 2020-2023  润新知