首页 > 其他分享 >Android网络请求(3) 网络请求框架OkHttp

Android网络请求(3) 网络请求框架OkHttp

时间:2022-11-22 22:55:44浏览次数:44  
标签:body 请求 request 网络 OkHttpClient String OkHttp string

Android网络请求(3) 网络请求框架OkHttp

本节我们来讲解OkHtpp网络请求框架

什么是网络请求框架

在我的理解中,网络请求框架是为了方便我们更加便捷规范的进行网络请求所建的类,我们通过调用该类中的方法可以快速地进行网络请求,切帮我们封装好了一些数据的处理方法,方便我们用更少的代码去做更多的事。

Android常见的网络请求框架

在android开发中,除了java原生的HttpURLConnection,常见的网络请求框架有

OkHttp

Volley

Retrofit

HttpClient

这其中最好用的莫过于Retrofit了,但是Retrofit是在OkHttp基础上再次进行封装的,所以我们先了解OkHttp网络请求,这对于我们日后的安卓开发也是有着很大的帮助。

OkHttp进行四种请求

导入依赖

在项目文件下build.gradle(app)的dependencies中导入所需要的库

implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.12.0'

这里我们使用3.12.0版本,如果需要使用其他版本,修改version版本号为自己想要的版本。

创建四种方法

GET

public static String get(String src){
//      实例化OkHttpClient
        OkHttpClient okHttpClient = new OkHttpClient();
//      构建request请求
        Request request = new Request.Builder()
                .url(src)
                .get()
                .build();
//      发送请求获取返回数据
        Call call = okHttpClient.newCall(request);
//      获取响应体
        ResponseBody body = null;
        String string = null;
        try {
            body = call.execute().body();
//          转换成string
            string = body.string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return string;
    }

可以看出这些代码对比起java原生的HttpURLConnection请求来说,简短了很多,不再需要设置一些超时,IO流之类的操着,那么因为OkHttp封装时给定了默认值,这样就大大减少了我们的工作量,我们现在只需要发送请求获取响应数据就行了。

POST

    public static String post(String src,String json){
//      实例化OkHttpClient
        OkHttpClient okHttpClient = new OkHttpClient();
//      构建请求体
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
//      构建request请求

        Request request = new Request.Builder()
                .post(requestBody)
                .url(src)
                .build();
//      发送请求获取返回数据
        Call call = okHttpClient.newCall(request);
//      获取响应体
        ResponseBody body = null;
        String string = null;
        try {
            body = call.execute().body();
//          转换成string
            string = body.string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return string;
    }

可以看出,这里我们只是修改了.get为.post并且传入了请求体,等于只需要新构建一个请求体,将我们的要向服务端发送的数据加入其中即可,这里我们使用的时application/json的方式,其他方式在第二篇提过一下,感兴趣的可以自己查阅资料。

PUT

put请求就更简单了,在原post请求中修改.post为.put即可,没有任何难度

    public static String put(String src,String json){
//      实例化OkHttpClient
        OkHttpClient okHttpClient = new OkHttpClient();
//      构建请求体
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
//      构建request请求

        Request request = new Request.Builder()
                .url(src)
                .put(requestBody)
                .build();
//      发送请求获取返回数据
        Call call = okHttpClient.newCall(request);
//      获取响应体
        ResponseBody body = null;
        String string = null;
        try {
            body = call.execute().body();
//          转换成string
            string = body.string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return string;
    }

DELETE

delete请求有两种不同的方式:携带参数与不携带参数。

携带参数:携带参数实在原post请求中将.post修改为.delete,一样的传入一个请求体即可

public static String delete(String src,String json){
//      实例化OkHttpClient
        OkHttpClient okHttpClient = new OkHttpClient();
//      构建请求体
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
//      构建request请求

        Request request = new Request.Builder()
                .url(src)
                .delete(requestBody)
                .build();
//      发送请求获取返回数据
        Call call = okHttpClient.newCall(request);
//      获取响应体
        ResponseBody body = null;
        String string = null;
        try {
            body = call.execute().body();
//          转换成string
            string = body.string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return string;
    }

不携带参数则时在get请求上重写,将.get修改为.delete即可

    public static String delete(String src){
//      实例化OkHttpClient
        OkHttpClient okHttpClient = new OkHttpClient();
//      构建request请求
        Request request = new Request.Builder()
                .url(src)
                .delete()
                .build();
//      发送请求获取返回数据
        Call call = okHttpClient.newCall(request);
//      获取响应体
        ResponseBody body = null;
        String string = null;
        try {
            body = call.execute().body();
//          转换成string
            string = body.string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return string;
    }

相信经历过HttpURLConnection那复杂的网络请求设置后,OkHttp框架将会让你更加快乐的进行网络开发。

修改默认设置

上面我们说过,OkHttp默认帮我们配置好了设置,那么我们不想使用默认设置该怎么办呢。

我们可以在创建OkHttpClient类的时候使用链式调用的方式来设置默认的参数,如

//      实例化OkHttpClient
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
//                一天
                .connectTimeout(Duration.ofDays(1))
//                系统默认dns
                .dns(Dns.SYSTEM)
                .build();

标签:body,请求,request,网络,OkHttpClient,String,OkHttp,string
From: https://www.cnblogs.com/nhgtx/p/16916050.html

相关文章

  • 网络爬虫-DeepNet爬虫
    DeepNet爬虫DeepWeb是相对于SurfaceWeb和DarkWeb而言的,是互联网页面的几种形态。DeepWeb指存储在网络数据库里,不能通过超链接访问而需要动态网页技术访问的资源集合......
  • freecplus框架-tcp网络通信
    文章目录​​一、源代码说明​​​​二、概述​​​​三、通信的报文格式​​​​四、socket通信客户端​​​​五、socket通信的服务端​​​​六、示例程序​​​​1、客......
  • R语言用igraph对上海公交巴士路线数据进行复杂网络、网络图可视化|数据分享
    全文链接:http://tecdat.cn/?p=30478原文出处:拓端数据部落公众号复杂网络简介现实世界中充满了网络世界,铁路线路网络、航空网络和人际关系网络。复杂网络是大量真实复杂......
  • RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测|附代码数据
    全文链接:http://tecdat.cn/?p=251332017年年中,R推出了Keras包 _,_这是一个在Tensorflow之上运行的综合库,具有CPU和GPU功能本文将演示如何在R中使用LSTM实......
  • Luogu2046 海拔 - 网络流 - 最短路 -
    题目链接:https://www.luogu.com.cn/problem/P2046首先观察可以发现最优解一定是左上部分是全0,右下是全1这样的形式然后题目就相当于让我们求一个\((1,1)\rightarrow(n......
  • vue2 axios11 await async 解构赋值 原生axios发起网络请求
    axios:专注发起网络请求的库get传参要params,post传参用data,具体传参看后端怎么写,后端乱写就套麻袋打一顿   post请求简化版:不用await和async时是一个prom......
  • 网络流学习笔记
    前言:本人已做完网络流24题。0.基础:Dinic最大流/最小割:https://www.luogu.com.cn/blog/creationhy/dinicDinic费用流:https://www.luogu.com.cn/blog/creationhy/dinic-f......
  • 【网络编程】Unity中使用Socket编程
    基本介绍名词解释Socket:网络连接的一端被称为socket。一个socket包含以下五个元素:使用的协议、本机IP、本地端口、远程IP、远程端口。IP地址:每台电脑都有一个自己的IP地址。......
  • Kraken:最大,最坏的僵尸网络
    Kraken:Thebiggest,baddestbotnetyetKraken:最大,最坏的僵尸网络《endurer注:1。Kraken:相传在挪威海中出现的怪物。详见:​​http://en.wikipedia.org/wiki/Kraken​​》......
  • Java实现网络爬虫 案例代码
    Java实现网络爬虫案例代码需求说明搭建开发环境,实现《三国演义》全文保存在本地 步骤分析访问网址:http://www.shicimingju.com/book/sanguoyanyi.html分析网站URL......