OkHttp框架简单使用学习总结

start:2020年8月31日

一、前言

一直想学网络框架,这次终于尝到味道了。我先学的简单易懂的OkHttp,感觉用上它之后发送网络请求省事多了,上楼都不累了。将自己目前对OkHttp的理解写成博客,方便以后更深入的学习,同时也提供给需要的人参考。

 

二、What is OkHttp?

Okhttp是安卓端非常火热的轻量级网络框架,它是一个处理网络请求的开源项目,是由移动支付Square公司贡献的。用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient)(度娘提供)

相关网站:OkHttp官网OkHttp_GitHub

 

三、增加开发依赖(AS)

在app路径下的 build.gradle配置文件中的 dependencies模块里增加以下代码(记得sync)(最新版本在github查看):

    implementation('com.squareup.okhttp3:okhttp:4.8.1')

 

四、发起请求流程

第一步:创建客户端 -> OkHttpClient

第二步:创建请求对象 -> Request

第三步:创建请求任务 -> Call

第四步:执行请求任务 ->  同步 execute()  /  异步 enqueue(Callback)

 

五、发起Get请求

 

  • 同步请求(代码顺序依次执行)
        //创建客户端
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10000, TimeUnit.MILLISECONDS)
                .build();


        //创建请求对象
        Request request = new Request.Builder()
                .get()
                .url("https://xxxxx.xx")
                .build();


        //创建client请求任务
        Call callTask = client.newCall(request);


        //执行请求任务-同步
        Response response = callTask.execute();
        if (response.isSuccessful()) {
           //请求成功
            ResponseBody body = response.body();//拿到响应体
            Gson gson = new Gson();//实例化Gson对象
            XXXBean xxx = gson.fromJson(body.string(), 
            XXXBean.class);//通过Gson的fromJson()方法将响应回来的body转换为bean类
            //通过Gson将响应body转换为Bean类,然后就方便操作了

        } else {
           //请求失败
          
        }

 

  • 异步请求(网络请求代码执行后等待响应后继续执行,在等待的时候主代码会继续执行,不会等待响应之后再执行,这就与网络请求代码执行异步了):
        //创建客户端
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10000, TimeUnit.MILLISECONDS)
                .build();


        //创建请求对象
        Request request = new Request.Builder()
                .get()
                .url("https://xxxxx.xx")
                .build();


        //创建client请求任务
        Call callTask = client.newCall(request);


        //执行请求任务-异步
        callTask.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Log.d(TAG, "onFailure: " + e.toString());
                //请求失败
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                int code = response.code();
                if (code == HTTP_OK) {
                //请求成功
            }
        });

 

六、发起Post请求

 

  • 同步请求
        //创建客户端
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10000, TimeUnit.MILLISECONDS)
                .build();


        //创建请求对象
        MediaType contentType = MediaType.parse("application/x-www-form-urlencoded");
        RequestBody requestBody = RequestBody.create(encryptBody, contentType);
        Request request = new Request.Builder()
                .post(requestBody)
                .url("https://xxx.xxx")
                .addHeader("device-platform", "android")
                .build();


        //创建client请求任务
        Call callTask = client.newCall(request);


        //执行请求任务-同步
        Response response = callTask.execute();
        if (response.isSuccessful()) {
            //请求成功

        }

 

  • 异步请求
        //创建客户端
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10000, TimeUnit.MILLISECONDS)
                .build();


        //创建请求对象
        MediaType contentType = MediaType.parse("application/x-www-form-urlencoded");
        RequestBody requestBody = RequestBody.create(encryptBody, contentType);
        Request request = new Request.Builder()
                .post(requestBody)
                .url("https://xxx.xxx")
                .addHeader("device-platform", "android")
                .build();


        //创建client请求任务
        Call callTask = client.newCall(request);


         //执行请求任务-异步
        callTask.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Log.d(TAG, "onFailure: " + e.toString());
                //请求失败
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                int code = response.code();
                if (code == HTTP_OK) {
                    //请求成功

                }
            }
        });

 

七、成员介绍

  • OkHttpClient 客户端
  • Request 请求对象
  • Call 执行请求对象
  • Gson -> 它是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
  • Json -> (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

 

八、Bean类与Body之间的互换 (Gson的使用)

 

  • ResponseBody -> String -> Bean类

ResponseBody body = response.body();//拿到响应体
Gson gson = new Gson();//实例化Gson对象
XXXBean xxx = gson.fromJson(body.string(), XXXBean.class);//通过Gson的fromJson()方法将响应回来的body转换为bean类
            

 

  • Bean类 -> String -> RequestBody


MediaType contentType = MediaType.parse("application/x-www-form-urlencoded");
XXXBean xxx = new XXXBean();
Gson gson = new Gson();
String s = gson.toJson(xxx);
RequestBody requestBody = RequestBody.create(s, contentType);

 

end:by take

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值