okhttp网络请求简介

(一)OkHttp网路请求框架详解 前面几篇文章讲解了HTTP相关的技术知识。接下来将看一下OkHttp是如何使用HTTP的相关技术,完成网络请求。如果没有看过之前HTTP的内容,建议先看一下再来看本章的内容。本文是介绍OkHttp的第一章节----OkHttp的网络请求框架。 阅读详情

对okhttp网络请求的简单介绍

public class App extends Application {

    //OkHttpClient实例是唯一的, 所有的请求都会通过这个OkHttpClient,所以所有的请求都可能被拦截器拦截,
    // 我们可以在这个必经之路,做一些通用的操作,比如打印日志.
    private static OkHttpClient okHttpClient;

    @Override
    public void onCreate() {
        super.onCreate();
        //建议一个app只有一个OkHttpClient实例
        okHttpClient = new OkHttpClient();
        okHttpClient = okHttpClient.newBuilder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .addInterceptor(new MyLogInterceptor())
                .build();
    }

    public static OkHttpClient okHttpClient() {
        return okHttpClient;
    }


    //拦截器,可以修改header,可以通过拦截器打印日志
    public class MyLogInterceptor implements Interceptor {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request().newBuilder()
                    .header("shenfen", "chinesse")
                    .build();
            HttpUrl url = request.url();
            String httpUrl = url.url().toString();
            Log.e("TAG", "============" + httpUrl);
            Response response = chain.proceed(request);
            int code = response.code();
            Log.e("TAG", "============response.code() == " + code);
            return response;
        }
    }

}

Activity类

public class MainActivity extends AppCompatActivity {

    private OkHttpClient okHttpClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        okHttpClient = App.okHttpClient();
    }


    //同步的get
    public void get(View view) {

        //request 设置url
        final Request request = new Request.Builder()
                .url("http://www.baidu.com")
                .build();

        new Thread(new Runnable() {
            @Override
            public void run() {
                //通过newCall方法将request转换成call ,如果用execute()是同步执行
                try {
                    Response response = okHttpClient.newCall(request).execute();
                    if (response.isSuccessful()) {

                        //通过response.body().string()拿到服务器给我们的json
//                        String json = response.body().string();

                        //通过response.body().inputStream拿到服务器给我们的输入流 -- 主要用在大文件
//                        InputStream inputStream = response.body().byteStream();

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "get成功", Toast.LENGTH_SHORT).show();
                            }
                        });

                    } else {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "get失败", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "get失败", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        }).start();
    }


    //异步,所以的回调方法里面都是分线程.不能更新ui
    public void getAsync(View view) {
        //request 设置url
        final Request request = new Request.Builder()
                .url("http://www.baidu.com")
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "get失败", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String json = response.body().string();
                    //用Gson解析
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "get成功", Toast.LENGTH_SHORT).show();
                        }
                    });
                } else {
                    //提示用户
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "get失败", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        });

    }


    //Post异步请求
    public void postAsync(View view) {
        FormBody formBody = new FormBody.Builder()
                .add("type", "yuantong")
                .add("postid", "11111111111")
                .build();
        final Request request = new Request.Builder()
                .url(" http://www.kuaidi100.com/query")
                .post(formBody)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "post失败", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String json = response.body().string();
                    //用Gson解析
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "post成功", Toast.LENGTH_SHORT).show();
                        }
                    });
                } else {
                    //提示用户
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "get失败", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        });
    }
}

Okhttp3网络请求框架的使用简介 Okhttp3网络请求框架的使用简介 添加Okhttp3的依赖 dependencies { //Okhttp3 网络请求框架 implementation 'com.squareup.okhttp3:okhttp:3.10.0' } 在AndroidManifest.xml中声明一下网络权限才行: <uses-permission android:name="android.permission.INTERNET" /> Okhttp3的使用 1. 异步GET请求 使用步骤 阅读详情

相关推荐

xposed开发10 - 使用OkHttp网络请求

xposed开发10 - 使用OkHttp网络请求 1.build.gradle引入OkHttp // 网络请求框架 implementation 'com.squareup.okhttp3:okhttp:3.11.0' 2.添加OkHttpUtils单例 public class OkHttpUtils { private static final long DEFAULT_READ_...

pureszgd的博客 3441

网络请求(二)— OkHttp

OkHttp简介 由Square公司开发并共享开源的高效网络访问框架,使用简单,它替代了HttpUrlConnection和Apache的HttpClient。 默认情况下OkHttp具备以下特性: 支持HTTP/2,允许所有同一个主机地址的请求共享同一个Socket连接 连接池减少请求延时 透明的GZIP压缩较少响应数据的大小 缓存响应内容,避免一些完全重复的请求 网络出现问题后,OkHttp保持不变,自动从问题中恢复 OKHttp双任务队列机制 OKHttp实现异步请求采用了双任务队队列机制,通过

xingyu19911016的博客 1万+

modbus

从机地址 功能码 起始地址高位 起始地址低位 数量高位 数量低位 字节数 0001H高位 0001H低位 0002H高位 0002H低位 CRC高位 CRC低位。每个输入寄存器的长度为2个字节。其中,CDH对应线圈0013H到001AH的内容,01H对应线圈001B到001CH的内容,未使用位用0填充。从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位 CRC高位 CRC低位。从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位 CRC高位 CRC低位。

lunhuicnm的博客 9746

流行框架(二)网络请求库 OKhttp

网络请求在 Android 开发中非常常见,为了降低开发周期和难度,我们经常会选用网络请求的开源库。网络请求库的本质是 封装了网络请求异步数据处理功能的库。其中网络请求功能则是基于Android网络请求原生的方法(HttpClient或者将call请求任务加入到正在运行的同步队列中调用基于拦截器链获取返回值方法请求结束后,从同步队列移除。同步请求是阻塞式的。异步请求enqueue()的核心步骤是五步。判断是否call对象重复添加,采用同步锁机制,第一次添加时,将标志executed。

芸兮的博客 1226

AI初识—LLM、Ollama、Llama都是些个啥?

LLM指的是大语言模型(Large Language Model),是一种基于深度学习的模型,能够理解和生成自然语言。它通过大量文本数据进行训练,具备了理解上下文、生成连贯文本和回答问题的能力。著名的LLM包括OpenAI的GPT系列和Google的BERT。在AI技术快速发展的背景下,LLM、Ollama和Llama代表了现代自然语言处理的不同方面。LLM为我们提供了强大的语言理解能力,Ollama为模型的部署和管理提供了便利,而Llama则在效率和多样性上不断推进。

小蜗牛的珍贵百宝箱 4628

Python小白避坑指南:用Ursina做3D图形,Entity的scale和color参数到底怎么调才不出错?

本文详细解析了Python Ursina引擎中Entity对象的scale和color参数调优技巧,帮助3D图形编程初学者避开常见陷阱。通过对比实验和典型场景分析,深入讲解三种缩放方式的区别、颜色定义的四种方法,以及参数组合的协同效应,助力开发者精准控制3D图形表现。

weixin_26782929的博客 412

一、OkHttp_网络请求流程

初识OkHttp,对其请求主要流程进行源码分析。并对OkHttpClient类的每一个成员属性进行介绍

FDoubleman的博客 1789

工业自动化实战:用LabVIEW的DSC模块实现MODBUS-TCP设备控制

本文详细介绍了如何利用LabVIEW的DSC模块实现工业自动化中的MODBUS-TCP设备控制。通过环境准备、核心功能解析、状态机实现及典型工业场景实战,帮助工程师快速掌握稳定可靠的通讯技术,提升工业自动化系统的运行效率。

salt9的博客 1057

Android 网络请求框架 OkHttp 的使用

一.OkHttp的历史和意义一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso)用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient,现在已经打不出来)。尽管Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相...

baipenggui_bo 1万+

物流分拣YOLO实战:YOLO26 OBB+YOLOv8多尺度融合,不规则包裹分拣效率提升40%(附训练+部署代码)

在物流分拣的工业场景中,模型的检测精度、推理速度、部署友好性本次基于YOLO26 OBB+YOLOv8多尺度融合打造的物流分拣视觉检测方案,精准解决了工业场景中不规则包裹的旋转检测、多尺度包裹的漏检问题,最终实现分拣效率提升40%,检测准确率提升至95%以上,且模型在边缘设备上的推理帧率稳定35FPS+,完全适配物流分拣的工业落地需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 881

GEE土地分类:一文读懂精度评定—混淆矩阵confusion matrix、整体精度OA、用户者精度、生产者精度、kappa系数和F1score系数含案例

本文介绍了如何在 Google Earth Engine (GEE) 中构建和分析混淆矩阵,以评估分类模型的性能。首先,通过 ee.Array 构建混淆矩阵,并展示了如何指定自定义类标签。接着,计算了多种性能指标,包括准确率、Kappa 值、F1-score、消费者准确率和生产者准确率。此外,还演示了如何计算不同类别的 F1-score。最后,通过一个实际案例,展示了如何利用 GEE 进行土地分类,并评估分类器的性能,包括训练和验证样本的准确率、Kappa 值等指标。这些步骤帮助用户理解模型的优缺点,并进行

此星光明博客 442

Android网络请求 |(二) OkHttp简介

Android 网络库的发展 ★ OkHttp(一)出现背景(二)定义与作用(三)高级功能(四)OkHttp3设计思路 二、OkHttp使用 (一)添加依赖+网络权限(二)使用演示 1.get 同步请求2.get 异步请求3.post 同步请求4.post异步请求

codeSong的博客 1825

Spring AI 实战:如何使用 MCP Server 搭建 MCP 天气查询服务

MCP(Model Context Protocol)是 Anthropic 提出的一种开放协议,它定义了AI 模型与外部世界交互的标准方式。通俗地说:大模型本身只拥有训练数据中的知识,它不知道今天的天气、无法查询你的数据库、不能调用你的内部 API。MCP 就是解决这个问题的"桥梁"——它让模型能够发现并使用外部工具(Tools),就像人用手去操作工具一样。角色职责对应依赖MCP Server暴露工具(Tool),供模型调用MCP Client连接 Server,让模型发现和使用工具本文我们先聚焦。

SmartSi 755

Android网络请求三方库OkHttp,Retrofit的使用,及其注解使用的简介

工作内容: 1.OkHttp的Post,Get请求 2.Retrofit的使用 学习分享:

风吹草低见牛羊 2104

Claude Code(8):使用 skill-creator 打造属于测试人员的 Skills

本文介绍了如何使用Claude Code的skill-creator工具快速创建测试相关的Skills。skill-creator是一个专门用于创建新Skills的Skill,相比手动创建更高效。文章详细演示了安装skill-creator的步骤,并通过创建"测试计划编写助手"的实战案例,展示了如何通过对话方式定义Skill名称、触发条件和功能需求。skill-creator会自动生成完整的SKILL.md文件和目录结构,用户只需确认即可完成Skill创建。

blues_C的博客 524

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OkHttp 与 Chuck 结合使用:优雅的 Android 网络请求调试方案

在 Android 应用开发过程中,网络请求调试是日常工作中不可或缺的一部分。Chuck 是一个轻量级的 OkHttp 拦截器,能够在应用内直接显示网络请求和响应的详细信息,无需连接电脑或使用额外工具。本文将详细介绍如何将 OkHttp 与 Chuck 结合使用,打造高效的开发调试环境。应用内通知:实时显示网络活动详细日志:记录完整的请求和响应数据无外部依赖:完全在设备上运行简单集成:只需添加一个拦截器数据持久化:保存历史请求记录// 配置收集器(决定哪些数据被收集)// 显示通知。

专注于移动开发的干货分享。提供高效解决方案、避坑指南与前沿技术解析。为开发者创造价值。 1087

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android okhttp网络请求的封装_Android端王者 OKHttp

在Android端,比较有名的是OkHttp和Retrofit,后者在网络请求又是依赖OkHttp的。所以说OkHttp是Android世界里最出名的框架也不为过,今天,我们就来认真分析一下这个框架,依照我务实的风格,这篇文章绝对不会是为了读源码而读源码。HTTP简介分析这个Http框架,我们就先从Http谈起,Http是互联网上应用最普遍的通讯协议。而所谓通讯协议,就是指通讯双方约定好传输数据的...

weixin_39755952的博客 345

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

超40k star的网络请求库,助你打造优质Android应用

OKHttp是一个高效、可靠且易于使用的Java HTTP客户端,由Square公司开发。它建立在Java的URLConnection之上,并提供了更简洁的API和更好的性能。以下是OKHttp的一些主要特点:高性能:OKHttp使用连接池和异步请求等技术,以提高性能并减少资源消耗。它支持HTTP/2和WebSocket协议,从而允许多个请求共享同一连接,减少网络请求的延迟。简洁易用的API:OKHttp的API设计注重简洁性和易用性,使得开发人员可以方便地发送和处理网络请求。

虎哥LoveDroid 1291

用OkHttp和jsoup借用百度百科得到简介

百度百科搜索某个词条时其url格式为 https://baike.baidu.com/item/XXX/.+ 而 https://baike.baidu.com/item/XXX 就可以得到我们想要网页, 通过审查元素发现简介在这个位置 用document.select("div[class=\"lemma-summary\"]");的得到所有此标签的Elements     关键...

Tz_AndHac的博客 536

Android 网络请求(二)OKHttp网络通信

同步请求:使用,可以直接获取响应内容,但它会阻塞当前线程,不适合在 UI 线程中执行。异步请求:使用,通过回调来处理响应数据,适合在 UI 线程中执行,避免阻塞 UI。POST 请求:可以通过创建请求体,并通过来发送。请求头:可以通过设置自定义请求头。OkHttp是一个功能强大且易于使用的 HTTP 客户端,适用于大多数 Android 项目的网络请求。对于复杂的请求场景,推荐使用OkHttp。

2402_85226471的博客 2730

Android中的OKHttp请求网络

OKHttp 文章目录OKHttp一、简介二、基本用法1、依赖2、使用OKHttp2.1、get请求2.2、post请求3、案例操作演示(借助runOnUiThread()方法进行线程切换)4、使用回调方法请求网络5、案例操作演示(通过Handler对象传递消息给主线程。) 一、简介 ​ OKHttp是一款优秀的HTTP框架,他支持get请求和get请求,支持基于http的文件上传和下载,支持加载图片,支持下载文件透明的GZIP压缩,支持响应缓存避免重复的网络请求,支持使用连接池来降低响应延迟

www?的博客 6700

OkHttp网络请求框架

OkHttp 是一个流行的 Android 网络库,提供了一个简洁且高效的 API 来进行 HTTP 请求。它比 Android SDK 中的 HttpURLConnection 更加灵活且易于使用。OkHttp 支持同步和异步请求,并且能够处理缓存、重定向、压缩等复杂的网络操作。

Bileton的博客 1484

Android Okhttp网络请求

前言 android网络框架之OKhttp 一个处理网络请求的开源项目,是安卓端最火热的轻量级框架 由移动支付Square公司贡献(该公司还贡献了Picasso) 可用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient) 优点 允许连接到同一个主机地址的所有请求,提高请求效率 共享Socket,减少对服...

饮料 2044

Android网络请求,Retrofit,OKHttp学习

本文介绍了Android中使用WebView和HTTP协议进行网络请求的方法。主要内容包括: WebView的基本使用:通过WebView嵌入浏览器功能,展示网页内容,支持JavaScript脚本,并能通过WebViewClient实现网页跳转控制。 HTTP协议基础:解释了客户端-服务器交互的基本原理,包括请求发送、响应接收和数据处理过程。 HttpURLConnection的使用方法: 创建HttpURLConnection实例 设置请求方法(GET/POST) 配置连接参数(超时时间等) 获取和处理服

giaoho的博客 1197

Android 开发之Okhttp网络请求日志打印

这里写自定义目录标题Android 开发之Okhttp 网络请求日志打印OkHTTP网络日志打印 Android 开发之Okhttp 网络请求日志打印 网络请求是开发的日常工作内容之一,网络日志打印也有很多要注意及优化的部分,本文分享我在开发过程中编写的OkHttp网络请求日志打印方法实现 OkHTTP网络日志打印 直接用OKHTTP请求接口的方式 要在接口请求的回调方法内进行信息获取和打印 ,即在自定义的Callback实现类或实现对象中 public abstract class MyStringC

Runt02的博客 4850

OkHttp请求网络数据,并listview展示

OkHTTP使用前步骤: 第一步:导入依赖: compile 'com.squareup.okio:okio:1.5.0' compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' compile 'com.googl

笔片 2746
上一篇: 属性动画Animator
下一篇: APK反编译
SuperMonsterH
博客等级 码龄9年 11粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值