iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android网络通讯之OkHttp
  • 197
分享到

Android网络通讯之OkHttp

okhttpandroid 2023-08-31 13:08:07 197人浏览 八月长安
摘要

OkHttp是安卓上常用的网络请求框架,不止可以发送http请求,还可以发送Socket请求等。 内置了连接池,减少了请求延迟支持缓存,减少重复的网络请求支持Cookie存储支持拦截器,可以对不同的请

OkHttp是安卓上常用的网络请求框架,不止可以发送http请求,还可以发送Socket请求等。

  • 内置了连接池,减少了请求延迟
  • 支持缓存,减少重复的网络请求
  • 支持Cookie存储
  • 支持拦截器,可以对不同的请求做拦截处理
  • 支持get、post等请求
  • 支持文件上传下载
  • 支持JSON请求
  • 支持同步、异步处理

官网地址:https://square.GitHub.io/okhttp/

使用步骤

准备

在build.gradle中引入依赖implementation("com.squareup.okhttp3:okhttp:4.10.0")

AndroidManifest.xml中添加网络请求权限

一、在安卓程序中使用

创建httpClient

OkHttpClient okHttpClient = new OkHttpClient();

1、同步get请求

安卓程序中的网络请求必须异步处理,所以另外启动了一个线程

public void doGetSync(View view) {    new Thread(() -> {        Request request = new Request.Builder().url("https://www.httpbin.org/get?name=test&b=123").build();        try {            Response response = okHttpClient.newCall(request).execute();            Log.d(TAG, "doGetSync: " + response.body().string());        } catch (IOException e) {            e.printStackTrace();        }    }).start();}

2、异步get请求

调用enqueue()方法,传入回调函数

public void doGetAsync(View view) {    Request request = new Request.Builder().url("https://www.httpbin.org/get?name=test&b=123").build();    okHttpClient.newCall(request).enqueue(new Callback() {        @Override        public void onFailure(@NonNull Call call, @NonNull IOException e) {        }        @Override        public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {            if (response.isSuccessful()) {                Log.d(TAG, "doGetAsync: " + response.body().string());            }        }    });}

3、同步post请求

post请求必须传入一个body参数,这里传入一个fORMBody

public void doPostSync(View view) {    new Thread(() -> {        FormBody formBody = new FormBody.Builder().add("name", "test").add("b", "123").build();        Request request = new Request.Builder().url("https://www.httpbin.org/post")                .post(formBody).build();        try {            Response response = okHttpClient.newCall(request).execute();            Log.d(TAG, "doPostSync: " + response.body().string());        } catch (IOException e) {            e.printStackTrace();        }    }).start();}

4、异步post请求

调用enqueue()方法,传入回调函数

public void doPostAsync(View view) {    FormBody formBody = new FormBody.Builder().add("name", "test").add("b", "123").build();    Request request = new Request.Builder().url("https://www.httpbin.org/post")            .post(formBody).build();    okHttpClient.newCall(request).enqueue(new Callback() {        @Override        public void onFailure(@NonNull Call call, @NonNull IOException e) {        }        @Override        public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {            if (response.isSuccessful()) {                Log.d(TAG, "doPostAsync: " + response.body().string());            }        }    });}

二、拦截器使用

OkHttp中有两种添加拦截器的方法

  • addInterceptor:先执行
  • addNetworkInterceptor:后执行
public class InterceptorTest {    @Test    public void test() throws IOException {        OkHttpClient httpClient = new OkHttpClient.Builder()                .addInterceptor(chain -> {                    System.out.println("---Interceptor拦截器---");                    Request request = chain.request().newBuilder().addHeader("os", "android").addHeader("version", "1.0").build();                    return chain.proceed(request);                })                .addNetworkInterceptor(chain -> {                    System.out.println("---NetworkInterceptor拦截器---");                    String os = chain.request().header("os");                    System.out.println("os = " + os);                    return chain.proceed(chain.request());                }).build();        Request request = new Request.Builder().url("https://www.httpbin.org/get?name=test&b=123").build();        Response response = httpClient.newCall(request).execute();        System.out.println("response = " + response.body().string());    }}

打印输入内容:

---Interceptor拦截器------NetworkInterceptor拦截器---os = androidresponse = {  "args": {    "name": "test",     "b": "123"  },   "headers": {    "Accept-Encoding": "gzip",     "Host": "www.httpbin.org",     "Os": "android",     "User-Agent": "okhttp/4.10.0",     "Version": "1.0",     "X-Amzn-Trace-Id": "Root=1-636b6373-18b0b24d6539a83e489ab0c4"  },   "origin": "124.78.136.197",   "url": "https://www.httpbin.org/get?name=test&b=123"}

三、Cookie使用

在某些网站中请求需要携带cookie,在OKHttp中提供了较好的支持

通过cookiejar方法提供cookie支持逻辑处理

本示例代码使用www.wanandroid.com的开放接口,可以自行去注册一个账号用于测试

public class CookieTest {    @Test    public void test() throws IOException {        Map<String, List<Cookie>> cookies = new HashMap<>();        OkHttpClient client = new OkHttpClient.Builder().cookieJar(new CookieJar() {            @Override            public void saveFromResponse(@NonNull HttpUrl httpUrl, @NonNull List<Cookie> list) {                cookies.put(httpUrl.host(), list);            }            @NonNull            @Override            public List<Cookie> loadForRequest(@NonNull HttpUrl httpUrl) {                List<Cookie> list = cookies.get(httpUrl.host());                return list == null ? new ArrayList<>() : list;            }        }).build();        // 登录接口        FormBody formBody = new FormBody.Builder()                .add("username", "xxxxx")                .add("passWord", "xxxxx")                .build();        Request request = new Request.Builder()                .url("https://www.wanandroid.com/user/login")                .post(formBody)                .build();        Response response = client.newCall(request).execute();        System.out.println("response1 = " + response.body().string());        // 登录成功后,加载收藏列表        Request request1 = new Request.Builder()                .url("https://www.wanandroid.com/lg/collect/list/0/json")                .build();        response =  client.newCall(request1).execute();        System.out.println("response2 = " + response.body().string());    }}

来源地址:https://blog.csdn.net/wlddhj/article/details/127772796

--结束END--

本文标题: Android网络通讯之OkHttp

本文链接: https://www.lsjlt.com/news/385671.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android网络通讯之OkHttp
    OkHttp是安卓上常用的网络请求框架,不止可以发送http请求,还可以发送socket请求等。 内置了连接池,减少了请求延迟支持缓存,减少重复的网络请求支持Cookie存储支持拦截器,可以对不同的请...
    99+
    2023-08-31
    okhttp android
  • [Android]网络框架之OkHttp(详细)(kotlin)
    目录 OkHttp的介绍 添加依赖 OkHttp的使用 get的同步与异步请求 post的同步与异步请求 POST请求的数据格式 POST请求上传文件 POST请求上传json对象 POST请求上传多个数据 OkHttp的配置 1.Buil...
    99+
    2023-09-10
    android okhttp kotlin
  • Android 网络请求框架解析之okhttp与okio
    安卓网络请求 先看一下今天的大纲 导入okhttp和okio依赖 禁用掉明文流量请求的检查 添加访问权限 布局及代码实现 运行结果 下面...
    99+
    2024-04-02
  • Android入门之使用OKHttp组件访问网络资源
    目录简介课程目标代码菜单res\menu\pop_menu.xml主UI界面MainActivity简介 今天的课程开始进入高级课程类了,我们要开始接触网络协议、设备等领域编程了。在...
    99+
    2022-12-26
    Android OKHttp访问网络资源 Android 访问网络资源 Android OKHttp
  • Android 使用okhttp监控网络数据
    这里使用Okhttp写了一个demo来监听网络请求过程中的一系列数据,包括当前网络类型、请求体、响应体大小,url,请求方式,当然还有本次核心获取域名解析时长,建立连接时长,保持连接时长,请求总时长这...
    99+
    2023-09-04
    okhttp 网络 android
  • Android中OkHttp是如何做网络请求的
    小编给大家分享一下Android中OkHttp是如何做网络请求的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!什么是OKhttp简单来说 OkHttp 就是一个客户端用来发送 HTTP 消息并对服务器的响应做出处理的应用层...
    99+
    2023-06-14
  • Java网络编程之UDP网络通信详解
    目录1.UDP网络通信编程原理1.1 UDP网络通信编程介绍1.2 UDP网络通信编程的基本流程2.UDP网络通信编程案例1.UDP网络通信编程原理 1.1 UDP网络通信编程介绍 ...
    99+
    2024-04-02
  • Docker如何实现网络通讯
    这篇文章主要介绍“Docker如何实现网络通讯”,在日常操作中,相信很多人在Docker如何实现网络通讯问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker如何实现网络...
    99+
    2024-04-02
  • android网络通信机制是什么
    Android网络通信机制是指Android系统中用于实现网络通信功能的一系列机制和API。Android系统提供了多种网络通信方式...
    99+
    2023-08-26
    android
  • http和https的区别?(网络通讯)
    HTTP:               HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)都是用于互联网通信的协议,但HTTPS是一种更加安全的协议。 HTTPS:              HTTP是一种明文传输协议,信息传输...
    99+
    2023-09-21
    http https 网络协议
  • linux网络通讯命令有哪些
    linux中的网络通讯命令有:1.dip命令,以拨号IP的方式建立对外的双向连接;2.getty命令,设置终端机模式,连线速率和管制线路;3.talk命令,与其他使用者对谈;4.write命令,传讯息给其他使用者;5.ytalk命令,与其他...
    99+
    2024-04-02
  • 初学Android之网络封装实例
    前言: 模拟用户登录,从安卓发送请求到服务端校验,再从服务端返回给安卓校验结果 1.在AndroidManifest.xml文件中添加网络权限 <uses-permissi...
    99+
    2024-04-02
  • CocosCreator通用框架设计之网络
    目录前言使用websocket构造 websocket 对象websocket 的状态websocket 的 APIwebsocket 的回调Echo 实例 设计框架Pro...
    99+
    2024-04-02
  • CocosCreator入门教程之网络通信
    网络通信概况 开发一个网络游戏,难免要处理网络通信。有几点问题需要注意: 1.服务端为了快速开发可能前期使用http通信,后面再改成websocket/socket。 2.同时存在h...
    99+
    2024-04-02
  • 【网络】UDP通讯(服务器/客户端)
    前言:UDP通讯实现比较简单,单某些情况下也会使用,建议先看一下说明,然后运行代码感受一下。 UDP服务器         传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议。TCP协议在网络通信中占主导地位,绝大多数...
    99+
    2023-09-16
    udp 网络 tcp/ip 网络协议 运维
  • Android入门之使用OKHttp多线程下载文件
    目录简介课程目标OkHttp的同步调用例子OkHttp的异步调用例子多线程并行下载文件需要解决的几个核心问题全代码前端后端简介 OkHttp是一个神器。OkHttp分为异步、同步两种...
    99+
    2023-01-03
    Android OKHttp下载文件 Android 下载文件 Android OKHttp
  • Android网络访问之Retrofit使用教程
    目录一、概念二、使用2.1HttpURLConnection2.2OKHttp2.3Retrofit2.3.1 定义实体类2.3.2 定义API接口2.3.3 构建Retrofit对...
    99+
    2022-12-14
    Android Retrofit Android网络访问
  • Android入门之利用OKHttp实现断点续传功能
    目录简介课程目标断点下载的原理自定义Android里的ProgressBar的样式项目结构前端代码后端代码DbOpeerateHelper.javaDBService.javaDow...
    99+
    2023-01-09
    Android OKHttp断点续传功能 Android OKHttp断点续传 Android 断点续传 Android OKHttp
  • Android中怎么通过 Http协议访问网络
    Android中怎么通过 Http协议访问网络,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。HTTPCONNECTION由于网络连接是耗时操作不能在UI线程操作,一般通过Han...
    99+
    2023-05-30
    android http
  • Rxjava+Retrofit+Okhttp进行网络访问及数据解析
    目录1,创建Android项目(Android studio)导入相关依赖2,定义接口类3,发出请求,回调信息4,Rxjava 和 Retrofit的结合前言: 在平时项目开发中Ok...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作