Android6.0新特性----OKHttp请求

老旧安卓设备AI聊天应用部署指南:OAC项目实战与优化 在移动应用开发中,系统兼容性与硬件资源优化是永恒的技术挑战。其核心原理在于通过架构设计平衡客户端性能与功能需求,例如采用瘦客户端-胖服务端的模式,将计算密集型任务卸载到云端。这种技术方案的价值在于能够最大化利用现有设备潜能,尤其适用于资源受限的物联网或边缘计算场景。具体到安卓生态,针对Android 4.x/5.x等低版本系统的应用部署,常涉及SDK版本降级、网络库兼容性处理以及APK体积优化等工程实践。本文以OAC(Old Android Chat)项目为例,详细拆解了如何在老旧设备上通过云端代理架构实现 阅读详情

最近新开发项目 网络请求采用Okhttp请求 正好利用周末 对okhttp进行了解 一下,先看官网的介绍:
HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP efficiently makes your stuff load faster and saves bandwidth.

OkHttp is an HTTP client that’s efficient by default:

HTTP/2 and SPDY support allows all requests to the same host to share a socket.
Connection pooling reduces request latency (if SPDY isn’t available).
Transparent GZIP shrinks download sizes.
Response caching avoids the network completely for repeat requests.
OkHttp perseveres when the network is troublesome: it will silently recover from common connection problems. If your service has multiple IP addresses OkHttp will attempt alternate addresses if the first connect fails. This is necessary for IPv4+IPv6 and for services hosted in redundant data centers. OkHttp initiates new connections with modern TLS features (SNI, ALPN), and falls back to TLS 1.0 if the handshake fails.

Using OkHttp is easy. Its 2.0 API is designed with fluent builders and immutability. It supports both synchronous blocking calls and async calls with callbacks.

You can try out OkHttp without rewriting your network code. The okhttp-urlconnection module implements the familiar java.net.HttpURLConnection API and the okhttp-apache module implements the Apache HttpClient API.

OkHttp supports Android 2.3 and above. For Java, the minimum requirement is 1.7.
简单介绍 有以下几点:
android老版本http请求:
HttpUrlConnection
Apache Hrrp Client
Android 6.0请求:
HttpUrlConnection
OKHttp

OkHttp优势:
1.支持SPDY,共享同一个Socket来处理同一个服务器的所有请求
2.如果SPDY不可用,则通过连接池来减少请求延时
3.无缝的支持GZIP来减少数据流量
4.缓存相应数据来减少重复的网络请求

同时okhttp支持Android2.3以上版本:
介绍完了,开始写代码demo
1.在build.gradle当中添加jar包

2.代码get请求
package demo.yangzc.com.okhttp;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private TextView text_json;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text);
text_json = (TextView) findViewById(R.id.text_json);
//1.开启一个子线程,做联网操作
new Thread() {
@Override
public void run() {
get();
}
}.start();
}
private void get() {
//1.创建对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.构建一个请求对象
Request request = new Request.Builder().url(“http://apistore.baidu.com/microservice/cityinfo?cityname=%E5%8C%97%E4%BA%AC“).build();
//3.发送请求
try {
Response response = okHttpClient.newCall(request).execute();
//服务端返回的json串
textView.setText(response+”“);
text_json.setText(“返回的Json:”+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.效果

3.post请求向服务端传递Json串:

/**
 * 发送post请求
 */
private void postJson() {
    //1.声明给服务器传递一个json串
    //2.创建一个OkhttpClient对象
    OkHttpClient okHttpClient = new OkHttpClient();
    //3.创建一个RequestBody 请求体(参数1:数据类型 参数2:传递的Json串)
    RequestBody requestBody = RequestBody.create(JSON, json);
    //4.创建一个请求对象
    Request request = new Request.Builder().
            url("http://192.168.0.102:8080/Test")
            .post(requestBody)
            .build();
    //5.发送请求获取响应对象
    try {
        Response response = okHttpClient.newCall(request).execute();
        //6.判断此请求是否成功
        if (response.isSuccessful()) {
            //7.发送成功后服务端返回内容进行打印
            textView.setText(response.body().string());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

4.向服务器发送post请求,并且传递相应参数:
/**
* 创建post请求 并且传递相应参数
*/
private void postParams() {
//1.创建一个OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.构建请求体(可以维护多个字段key values)
RequestBody requestBody = new FormEncodingBuilder()
.add(“platform”, “android”)
.add(“version”, “23”)
.build();
//3.构建一个请求对象
Request request = new Request.Builder().
url(“192.168.0.102:8080/TestParams”).
post(requestBody).build();
//4.将请求发送并获取相应响应
try {
Response response = okHttpClient.newCall(request).execute();
//5.判断此请求是否成功
if (response.isSuccessful()) {
//6.发送成功后服务端返回内容进行打印
textView.setText(response.body().string());
}
} catch (IOException e) {
e.printStackTrace();
}
}
5.完整代码:
package demo.yangzc.com.okhttp;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private TextView text_json;
//维护传递给服务端的数据类型
public static final MediaType JSON = MediaType.parse(“application/json;charset=utf-8”);
public static final String json = “{\”errNum\”:0,\”retMsg\”:\”success\”,\”retData\”:{\”cityName\”:\”\u5317\u4eac\”,\”provinceName\”:\”\u5317\u4eac\”,\”cityCode\”:\”101010100\”,\”zipCode\”:\”100000\”,\”telAreaCode\”:\”010\”}}”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text);
text_json = (TextView) findViewById(R.id.text_json);
//1.开启一个子线程,做联网操作
new Thread() {
@Override
public void run() {
get();
postJson();
postParams();
}
}.start();
}
/**
* 创建post请求 并且传递相应参数
*/
private void postParams() {
//1.创建一个OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.构建请求体(可以维护多个字段key values)
RequestBody requestBody = new FormEncodingBuilder()
.add(“platform”, “android”)
.add(“version”, “23”)
.build();
//3.构建一个请求对象
Request request = new Request.Builder().
url(“192.168.0.102:8080/TestParams”).
post(requestBody).build();
//4.将请求发送并获取相应响应
try {
Response response = okHttpClient.newCall(request).execute();
//5.判断此请求是否成功
if (response.isSuccessful()) {
//6.发送成功后服务端返回内容进行打印
textView.setText(response.body().string());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 发送post请求
*/
private void postJson() {
//1.声明给服务器传递一个json串
//2.创建一个OkhttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//3.创建一个RequestBody 请求体(参数1:数据类型 参数2:传递的Json串)
RequestBody requestBody = RequestBody.create(JSON, json);
//4.创建一个请求对象
Request request = new Request.Builder().
url(“http://192.168.0.102:8080/Test“)
.post(requestBody)
.build();
//5.发送请求获取响应对象
try {
Response response = okHttpClient.newCall(request).execute();
//6.判断此请求是否成功
if (response.isSuccessful()) {
//7.发送成功后服务端返回内容进行打印
textView.setText(response.body().string());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 发送get请求
*/
private void get() {
//1.创建对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.构建一个请求对象
Request request = new Request.Builder().url(“http://apistore.baidu.com/microservice/cityinfo?cityname=%E5%8C%97%E4%BA%AC“).build();
//3.发送请求
try {
Response response = okHttpClient.newCall(request).execute();
//服务端返回的json串
textView.setText(response + “”);
text_json.setText(“返回的Json:” + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}

深入理解Android开发中的OkHttp3.2.0与Okio1.7.0 随着现代移动与网络应用的飞速发展,数据传输效率成为衡量软件性能的关键指标之一。在这一背景下,OkHttp和Okio应运而生,它们分别是网络请求处理和I/O操作优化的开源库,由Square公司精心打造。OkHttp作为一款高效且可靠的HTTP客户端,广泛应用于Android和Java应用中,而Okio则是其底层的I/O库,以简洁易用的API简化了数据的读写操作。OkHttp能够处理多种HTTP请求,支持同步、异步以及重定向请求,还能智能管理连接池以复用TCP连接,从而提升了数据传输效率。 阅读详情

相关推荐

最新稳定版OkHttp 3.2.0库程序文件下载

OkHttp 是一个高效的HTTP客户端,支持同步和异步调用。主要用于Android和Java应用程序,广泛用于网络请求。其设计目的是在提供简洁的API的同时,能够应对常见的网络问题,如从临时的网络故障中恢复。

weixin_31776191的博客 1164

揭秘Android 6.0 之 OkHttp

前言:Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池。但在Android6.0已经移除了Apache HTTP Client,推荐使用HttpURLConnection,如果还相继续使用俩种HTTP请求方式,OkHttp会是一个不错的选择。  kHtt

WFYOU的博客 1090

OKHttp断点续传Demo 下载

Andriod平台 基于OKHttp3 封装的,配合RxJava使用的 断点续传功能代码,配合博客使用

react-router-dom v6.0新特性及路由守卫

一、概述 v6相比v5,做了很多的优化。包括书写上更加的便捷,更加体现组件化思想。以往在处理路由嵌套和鉴权方面,v5的写法都靠各自开发人员去实现相对比较参差不齐。一下针对v6的配置做简单的介绍。 二、useRoutes v6中路由的设置采用hook的方式,有点像vue的router的实例化。 import {useRoutes} from "react-router-dom"; import { Suspense, lazy } from 'react' const routes = [ { p

3214

Unity物理引擎实战:从刚体重心到碰撞体,打造真实不倒翁交互

刚体(Rigidbody)是Unity物理系统的核心组件,它定义了游戏对象的物理属性,如质量、阻力和碰撞响应。其原理基于牛顿力学,通过物理引擎(如PhysX)实时计算物体的运动状态。在游戏开发中,刚体的价值在于能够模拟真实世界的物理行为,为玩家提供沉浸式的交互体验。碰撞体(Collider)则定义了物体的形状边界,用于检测与其他物体的接触。通过精细调整刚体的重心(Center of Mass)和碰撞体形状,开发者可以模拟出各种有趣的物理现象,例如低重心物体的动态平衡。这在休闲游戏、物理玩具模拟等场景中尤为实

weixin_33976326的博客 355

【漆学军】MT4进阶到MT5速成之路(2)获取持仓

MT5在持仓获取上,要比MT4复杂些,分两部分,获取持仓和挂单采用了不同的方法。 一、获取持仓中的buy和sell单 int b=0;//获取buy单个数 int s=0;//获取sell单个数 double lot_total_buy=0;//获取持仓中buy单的总手数 double lot_total_sell=0;//获取持仓中sell单的总手数 for(int i=0; i<PositionsTotal(); i++) { ulong ticket=Positi

漆学军的编程笔记 1624

android 6.0 弹窗权限,android 6.0 权限申请的弹窗怎么处理

用户提问源码中被用来检查和请求权限的方法分别是Activity的checkSelfPermission和requestPermissions。这些方法api23引入,如下代码: private static final String TAG = "Contacts"; private void insertDummyContact() { // Two operations are need......

weixin_29301059的博客 556

CCS20实战入门:第一个工程搭建示例

通过实际操作演示如何在ccs20中创建并配置首个开发项目,涵盖环境设置与基础调试步骤,帮助新手快速上手ccs20集成开发环境,提升嵌入式开发效率。

weixin_31185473的博客 884

点击按钮,跳出消息提示框的操作

    仍然是自己练手的程序中,想学别人的一点击按钮,就可以跳出一个消息框,确认后再进行下一步操作。    详细的操作如下    下图的返回按钮,是我想进行添加事件的按钮。        双击进入编辑, private void button3_Click(object sender, EventArgs e)//点返回,隐藏参数 { Dial...

lfjiuri的博客 1万+

Kubernetes集群环境搭建与初始化

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

m0_75254642的博客 1524

用FSL的eddy_topup pipeline完整处理DTI数据:从原理到实战,搞定涡流和磁化率畸变

本文详细介绍了如何使用FSL的eddy_topup pipeline完整处理DTI数据,解决涡流和磁化率畸变问题。从原理到实战,涵盖了数据格式转换、脑提取、b0图像处理等关键步骤,并提供了acqparams.txt配置和eddy命令的详细解析,帮助研究人员高效完成DTI数据校正。

weixin_29235525的博客 283

【android】Okhttp3信任所有证书设置

让okhttp信任所有证书,采用的是忽略https认证,自己构建一个x509认证,默认通过,再传到ssl配置工厂中,再用okhttpclient发送请求的时候就不会再报证书错误。

鸡排小农的博客 5095

Mplus实战:三变量随机截距交叉滞后模型(RI-CLPM)语法详解与扩展

本文详细解析了Mplus中三变量随机截距交叉滞后模型(RI-CLPM)的构建原理与语法实现。通过将变量分解为稳定的个体间差异与动态的个体内波动,模型能更纯净地揭示多变量间的纵向交互影响。文章以工作压力、睡眠质量与工作满意度为例,提供了完整的语法模板、关键参数设置(如NOCOV命令、残差相关)及结果解读指南,帮助研究者避开常见误区,稳健分析复杂动态关系。

wdx0123456的博客 926

Android 6.0新特性

Android 6.0新特性 用户体验: 5月29日零点,谷歌正式在旧金山举办了广大安卓机友们都很期待的I/O开发者大会,这是谷歌每年都会举办的一次盛会,而对安卓机友们来说就是一次期盼。此次在会上,谷歌为大家带来了众望所归的安卓6.0(Android M)操作系统。 新特性一:App Permissions(软件权限管理)   在安卓6.0里,应用许可提示可以自定义了。它允许对

岁月静好,与珊到老! 750

RH850系列芯片深度剖析 1.5-链接(ld)文件解析

基础编译过程分为四个阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)。执行这四个阶段的程序(预处理器、编译器、汇编器、和链接器)一起构成了编译系统。CONSTANTS接下来的内存空间定义部分会使用这些常量来定义内存空间的范围,理论上来说不定义常量也没有影响,直接用魔鬼数字代替,定义常量的主要目的就是方便理解以及方便修改;从示例中可以看出,常量的值可以为16进制或者10十进制,而且10进制支持数量级单位(k级,M级);

本博客专注于嵌入式软件领域技术分享。 1427

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error 解决方式: 1.qt程序不要放在共享目录下编译,直接拷贝到ubuntu系统中编译 2.修改/home/xt/Qt5.12.1/5.12.1/android_armv7/mkspecs/android-clang中 #QMAKE_LINK = QMAKECXXQMAKE_CXX QMAKEC​XXQMAKE_CFLAGS -Wl,–exclude-libs,libgc

xt18971492243的博客 736

Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架

Retrofit终于迎来了2.0版本,也修复了老版本的一些bug,这是修复日志,各位可以自己去看看,https://github.com/square/retrofit/blob/master/CHANGELOG.md 注:本文转自http://blog.csdn.net/ljx19900116/article/details/50789416 1.使用retrofit,需要下载一些jar包 retrofit gitHub项目地址:https://github.com/square/retr

DoIt的博客 1147

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android开发避坑指南:从零配置OkHttp3,解决Android 9.0+的HTTP请求问题

本文详细解析了Android 9.0+系统中OkHttp3的高阶配置与网络适配策略,重点解决HTTP请求问题。通过网络安全配置(Network Security Config)和OkHttpClient的优化实践,帮助开发者规避常见兼容性陷阱,提升应用网络通信的安全性和稳定性。

weixin_27966471的博客 362

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android OkHttp4 RequestBody.create()过时解决办法 kotlin、java版本

前段时间,OKhttp3已升级到Okhttp4 ,编写语言由java过渡到kotlin,而以前okhttp3经常用到的post提交数据的: RequestBody.create() 已过时,并且换成了kotlin的新特性写法! okhttp3 post请求的代码(4.0版本已过时): val request:Request=Request .Builder() .post(Requ...

新猿的博客 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android okhttp3中的坑

因为自己的毕设需要用到用户数据交互,所以想学一个Android 的网络请求框架。 在网上一搜结果发现Okhttp + retrofit + rxjava特别火,所以就学习一下,顺便再网上搜了源码以备学习之用,结果遇到一个大坑。 错误说明如下: 2019-04-10 12:00:05.903 19895-19895/com.main.mytest_okhttp2 E/AndroidRuntime: ...

qq_20501625的博客 1905

Android 9.0(P)默认禁止Http协议,OkHttp3报异常CLEARTEXT communication to host not permitted by network

今天公司之前的项目适配Android 9.0(P) ,进入到登录界面,输入账号密码,报错,内容为: CLEARTEXT communication to host(host主机地址) not permitted by network. 翻译:网络安全策略不允许与host(host主机地址)进行明文通信。 查看报错异常来源 发现是OkHttp3做网络请求框架时,如果是http请求而非https请求...

暖暖的云阳的博客 1187

Android项目:使用Jetpack组件搭建一个基于MVVM的RxAndroid(RxJava)、Retrofit、OkHttp的项目

通过对RxAndroid、Retrofit和OkHttp的学习,用它们整合搭建一个基于MVVM的项目。 通过本篇Blog可以学习到如何利用这些框架整合搭建一个项目。 下面开始进入正题,Blog目录按照Demo项目从下而上,先请求数据再进行业务逻辑处理最后到界面展示。 本篇以获取公众号列表数据展示为例。 准备工作 添加依赖 依赖的版本一定要匹配,不然会出现一些乱七八糟的问题。细节可以看我之前的Blog集成错误 因为在Retrofit2中使用了JDK8的新特性,所以除了依赖,还要添加支持。 // .

阿秋的Blog 3537

适合新手看的安卓开发书android studio

第一行代码 Android 第2版 第二版 郭霖 手机app Android 安卓开发从入门到精通程序设计编程教程教材书籍 https://s.click.taobao.com/bFSuyU

wangchaoqi1985的博客 7252

RxJava2+Retrofit2+RxLifecycle3+OkHttp3网络请求封装(动态演示)

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。BAT大厂面试题、独家面试工具包,资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

2301_82241819的博客 606
上一篇: RecyclerView介绍(四)----实现瀑布流效果
下一篇: 图片加载利器——Picasso
yang0range
博客等级 码龄12年 15粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值