Android 网络编程(三) 浅谈HttpURLConnection

Android网络编程(二)HttpClient与HttpURLConnection 上一篇我们了解了HTTP协议原理,这一篇我们来讲讲Apache的HttpClient和Java的HttpURLConnection,这两种都是我们平常请求网络会用到的。无论我们是自己封装的网络请求类还是第三方的网络请求框架都离不开这两个类库。 阅读详情

引言

  上一篇文章我们简单的分析了HTTP 的协议,理解了HTTP协议的基本构成。在Android 6.0以前,Android 原生的HTTP请求方式有两种,HttpClient和HttpURLConnection。但因为HttpClient 的API比较复杂并且维护起来比较繁琐,Android 团队在6.0以后的版本便移除了HttpClient 的支持。而HttpUrlConnection由于其API 简单并且体积小便于维护,便成为了官方推荐的网络请求方式,我们这篇文章也主要讲述下HttpUrlConnection。

HttpUrlConnection 的使用

  使用HttpUrlConnection 来进行网络请求大体上可以分为4个步骤:

  • 获取到HttpURLConnection 对象
  • 进行全局的网络设置并建立Http连接
  • 进行数据处理
  • 关闭连接

获取到HttpURLConnection 对象

   使用URL 对象的openConnection()方法获取到HttpURLConnection 对象,这个对象是我们进行网络请求的核心。
   网络请求在响应时间上有很大的不确定性,如果将网络请求放在主线程中执行,过长的耗时操作会阻塞主线程,导致程序卡死。因此,网络请求都应该放在子线程中执行。
  示例代码如下

Url url = new URL("http://www.xianleshen:8080/springmvc/MyServlet/data?name=谦行&age=23");
connection = (HttpURLConnection) url.openConnection();

进行全局的网络设置并建立Http连接

  获取到HttpURLConnection对象后,要进行一些网络设置,比如说设置网络请求方式,连接超时时间,读取超时时间,设置要发送的数据等。如以下代码所示:

 // HttpURLConnection默认就是用GET发送请求,这里要发送数据,使用POST
connection.setRequestMethod("POST");
//设置连接超时时间
conn.setConnectTimeout(8000);
//设置读取超时时间
conn.setReadTimeout(8000);
// URL 连接可用于输入。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true
connection.setDoInput(true);
 // URL 连接可用于输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
connection.setDoOutput(true);
// 获取conn的输出流
OutputStream out = connection.getOutputStream();
 //给这个输出流添加一个处理流,方便操作
DataOutputStream dos = new DataOutputStream(out);
//使用 writeBytes() 方法将数据提交到服务器
dos.writeBytes("username=admin&password=123456");
// 建立连接
connection.connect();

从服务器读取数据并进行数据处理

  通过调用 HttpUrlConnection 对象的一些方法可以获取到服务器发送给客户端的相应信息,如状态码、响应内容长度、包含了响应内容的输入流等等。如以下示例代码:

//获取响应状态码,如 200 表示成功等
int responseCode = connection.getResponseCode();
//获取包含响应内容的输入流
InputStream in = connection.getInputStream();
//获取响应内容长度
int contentLength = connection.getContentLength();

  在获取输入流之后,就可以利用 Java 中的 IO 流的知识对该输入流进行流处理,从而得到我们想要的数据。

关闭连接

  在我们完成了所有数据写入和读取的流操作后,应该调用 disconnect() 方法关闭 Http 连接。

//关闭 Http 连接
connection.disconnect();

UrlHttpUtils

  推荐给大家一个最简单的HttpURLconnection封装——UrlHttpUtils,只有五个Java文件,可以直接将java 文件拷到工程中使用。CallBack方法执行在UI线程。支持get请求,post请求,支持文件上传和下载。建议大家在有时间看看源码,这样才能灵活的使用这些封装的方法。

封装的功能

  • 一般的get请求
  • 一般的post请求
  • 上传单个文件(包含进度)
  • 上传list集合文件
  • 上传map集合文件
  • 文件下载(包含进度)
  • 图片下载(实现了图片的压缩)

使用示例

GET请求
   String url = "https://www.baidu.com/";
    UrlHttpUtil.get(url, new CallBackUtil.CallBackString() {
       @Override
       public void onFailure(int code, String errorMessage) {

       }

       @Override
       public void onResponse(String response) {

       }
   });
POST请求
   String url = "https://www.baidu.com/";
   HashMap<String, String> paramsMap = new HashMap<>();
   paramsMap.put("title","title");
   UrlHttpUtil.post(url, paramsMap, new CallBackUtil.CallBackString() {
       @Override
       public void onFailure(int code, String errorMessage) {
   
       }

       @Override
       public void onResponse(String response) {

      }
   });
上传文件
	File file = new File(Environment.getExternalStorageDirectory()+"/kwwl/abc.jpg");
        HashMap<String, String> paramsMap = new HashMap<>();
        paramsMap.put("title","title");

        UrlHttpUtil.uploadFile("url", file,  "image",UrlHttpUtil.FILE_TYPE_FILE, paramsMap, new CallBackUtil.CallBackString() {
            @Override
            public void onFailure(int code, String errorMessage) {

            }

            @Override
            public void onResponse(String response) {

            }
        });
下载文件
UrlHttpUtil.downloadFile("url", new CallBackUtil.CallBackFile("fileDir","fileName") {
            @Override
            public void onFailure(int code, String errorMessage) {

            }

            @Override
            public void onProgress(float progress, long total) {
                super.onProgress(progress, total);
            }

            @Override
            public void onResponse(File response) {

            }
        });
Android网络编程:HttpURLConnection到Retrofit2实战指南 网络通信是移动应用开发的核心能力,Android平台提供了从基础到高级的完整网络编程方案。HttpURLConnection作为标准HTTP客户端,适合理解网络通信基本原理;OkHttp通过连接池和拦截器机制提供了高效网络层实现;Retrofit2则在此基础上构建了类型安全的REST客户端。JSON作为轻量级数据交换格式,配合Gson等库可高效处理序列化与反序列化。这些技术在电商、社交、IoT等场景广泛应用,开发者需要根据项目规模选择合适方案,小型项目可从HttpURLConnection入手,中大型项目推 阅读详情

相关推荐

安卓学习笔记42:基于HTTP网络编程

利用URLConnection和HttpClient访问网络资源

howard2005的专栏 1415

java之URLConnection成员变量doInput和doOutput

在URLConnection中有两个字段控制连接是否可以获取数据(doInput)和发送数据(doOutput) 我们直接看Java API的解释吧! 1、doInput字段 可以看到获取数据(doInput)默认为true,说明可以从服务器获取数据,这也就是我们经常拿URLConnection就用的原因吧,因为默认呐。 URLConnection内部实现是sock

banyungong666的博客 807

SLUB DEBUG 检测slab 内存泄漏

文章介绍如何定位linux 内核中slab 内存泄漏。

一叶知秋的博客 1489

URL的介绍使用和URLConnection的使用

URl访问网络资源与URLConnection网络请求提交 URL简介 URL就是一个网络资源定位器,通过URL我们可以找到具体的网络资源,URL分为3部分,分别是协议部分(http://)、域名部分(baidu,该部分通过DNS解析为具体的ip)、网站资源部分(具体的网站文件) URL类的方法 String getFile();获取url对应的资源名 String getHost();

qq_2790289459的博客 1013

Python 逆向解析知乎盐选反爬字体,实现内容精准还原

本文详细解析了知乎盐选内容的反爬字体机制,并提供了使用Python逆向解析WOFF字体文件的完整方案。通过fontTools库构建解码字典,实现乱码文本的精准还原,帮助开发者应对动态字体策略,同时强调法律与道德风险。

weixin_29268385的博客 1295

Comsol 基于局部谐振压电材料的可调水下低频吸声

它通过建立基于LRPM的水下吸声理论模型,从有效材料的角度分析可调吸声特性和吸声机理,进一步提高吸声性能。该研究发现,薄的LRPM层可以在目标低频范围内实现出色的吸声效果,而这个目标低频可以通过操纵谐振分流电路进行主动调谐。通过引入局部谐振压电超材料和可调谐的谐振分流电路,研究人员能够有效地控制水下低频吸声特性,并且在吸声带宽方面取得了显著的改进。通过利用薄的活性超材料层,LRPM在水声吸声方面展现出潜力,并且通过操纵谐振分流电路,可以实现对吸声特性的精细控制。

weixin_45382232的博客 786

android开发——okhttp的使用(封装为工具类)

使用功能强大,可以传参(包括json)、传header信息,Cookie的处理,回调函数处理等。先看下调用的代码: private static final String CONTENT_TYPE = "application/json; charset=utf-8"; public static void login() { HashMap&lt;String, String&gt;...

river66的博客 3010

数据结构——滑动窗口

入:下标为 i 的元素进入窗口,更新相关统计量。如果 i < k−1 则重复第一步更新:更新答案。一般是更新最大值 / 最小值出:下标为 i−k+1 的元素离开窗口,更新相关统计量✔1. 定长子串中元音的最大数目✔2. 找到一个数字的 K 美丽值✔4. 子数组的最大平均数 |方法一:前缀和方法二:滑动窗口7. 得到 K 个黑块的最少涂色次数8. 爱生气的书店老板9. 几乎唯一子数组的最大和10. 长度为 K 子数组中的最大和11. 可获得的最大点数12. 最少交换次数来组合所有的1 ||

qq_68915288的博客 762

HttpUrlConnection中setDoInput和setDoOutput的区别

今天写三级缓存类,用到了这两个方法,特意从网上找了一些资料学习: HttpUrlConnection httpUrlConnection.setDoOutput(true) httpUrlConnection.setDoInput(true) 理解: HttpURLConnection conn = (HttpURLConnection)url.openConnection(); ...

zkbilian的博客 1495

双足步行机器人的ZMP与CoP检测

静态步行与动态步行   机器人步态分为静态步行和动态步行。当机器人做静态步行运动时,身体的各个部分运动速度很小,机器人的整体稳定性较易控制。静态步行稳定性采用机器人的重心地面投影点(Center of Gravity,简称CoG)作为稳定性标准,这种判定方法适用于运动较为缓慢的情况。如果机器人采用的是一种高速运动的步行方式,则称之为动态步行。当机器人进行动态步行时,其重心的位置和加速度的大小时...

weixin_34112208的博客 5906

Coze智能体开发:工作流教程之解析文件概述

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 1793

安卓网络编程——HttpURLConnection

部分案例需要一定的XML和JSON解析知识 https://blog.csdn.net/nishigesb123/article/details/89190973 Socket、TCP、HTTP等等概念搞不清区别的可以先走下面的链接(好像也是转的,不过贴的几张图很好) https://www.cnblogs.com/merray/p/7918977.html 暂时不涉及Socket部分的内...

旧日灯塔 2553

YOLOv12改进策略【损失函数篇】| 替换Powerful-IoU(PIoU),增强对中等质量锚框的关注力,引导锚框更直接、高效地回归

本文针对现有基于IoU的损失函数在目标检测任务中存在的问题,提出了利用Powerful-IoU(PIoU)及其升级版PIoU v2改进YOLOv12的损失函数,以提高模型精度。文章详细介绍了PIoU和PIoU v2的结构原理,并提供了在YOLOv12中实现这些损失函数的具体步骤和代码修改方法。

Limiiiing的博客 931

Android 网络编程入门指南

在移动应用开发中,网络编程是一个不可或缺的部分。它允许应用与远程服务器进行数据交换,实现数据的上传和下载。本文将为你提供一个关于Android网络编程的入门指南,帮助你理解基本概念和实现步骤。

Unity打怪升级 2327

从 OA 门户到 SAP 的单点登录全景解析

OA(Office Automation)门户往往已与企业身份证明源(Microsoft Entra ID、LDAP 等)集成。管理员希望:员工在 OA 登陆后访问 SAP Fiori Launchpad、OData API 或 RFC 接口时无需再次输入账号密码,而 SAP 仍能识别用户身份并执行基于角色的授权。此时 OA 可以直接充当 IdP,也可以把企业 IdP 发放的令牌转发给 SAP 充当 SP(service provider)。SAP Help Portal 将这类跨系统认证称为 single

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 995

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

浅谈android网络编程

本文一共包含3个demo,他们分别是: 1. 用户登录:用户在Android客户端输入用户名密码,上传至服务器,服务器通过查询数据库中的信息,给客户端返回一个正确性的提示。 2. 用户注册:用户将自己输入的姓名和兴趣爱好,上传至服务器,服务器将新增用户添加至数据库中。 3. 下载图片流

vanpersie_9987的博客 2041

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android学习——HttpURLConnection

HttpURLConnection 1.概述 如今,移动端APP渗透到各行各业,数量难以计数,几乎所有应用都会使用到网络,掌握Android网络编程是APP开发是核心技术,必备技术。这是因为移动设备的计算能力存储能力都是有限的。因此移动设备依赖网络计算、存储就成为了主要的方式,重要程度就不言而喻了。 Android完全支持JDK本身的TCP、UDP网络通信的API,也就是我们在JAVASE阶段讲解...

UUUUUltraman的博客 2466

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

efm32 入门.pdf

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

InterviewQuestion解析:Android网络编程与HttpURLConnection的终极指南

在Android开发面试中,网络编程是必考的核心技能之一。作为Android开发者,掌握HttpURLConnection的使用技巧和优化方法至关重要。本文将为您详细解析Android网络编程的关键知识点,帮助您在面试中脱颖而出!🚀 ## Android网络编程基础概述 Android应用开发离不开网络通信,而HttpURLConnection作为Android原生的HTTP客户端,是开发者

gitblog_00933的博客 331

Android网络编程(八) 之 HttpURLConnection原理分析

1 使用回顾 我们在前面博文《Android网络编程(四) 之 HttpClient与HttpURLConnection》中已经对HttpURLConnection的使用进行过介绍。今天我们接着往下来阅读HttpURLConnection的关键源码从而它进行更加深入的理解。开始前,先来回顾一下简单的使用,通过使用步骤来深入分析每行代码背后的原理,代码如: InputStream inStre...

子云心的博客 1584

Android 网络编程(三)HttpURLConnection

HttpURLConnection HTTP的URLConnection(RFC 2616)用于通过Web发送和接收数据。数据可以是任何类型和长度。该类可用于发送和接收长度未预先知道的流数据。 HttpURLConnection使用步骤: 通过调用URL.openConnection()获取新的HttpURLConnection并将结果转换为HttpURLConnection。 准备请求

奋斗的菜鸟ing 1267

Android通过HttpURLConnection和HttpClient接口实现网络编程

这篇文章主要介绍了Android通过HttpURLConnection和HttpClient接口实现网络编程的相关资料,需要的朋友可以参考下 Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是学习中的一些经验。 1、HttpURLConnection接口         首先需要明确的是,Http通信中的POST和GET

吧主 907

安卓下的网络编程

一、概述安卓下的网络编程和javaweb中并没有很大的差别,还就是向服务器发请求,服务器返回响应。安卓下的网络编程指的是客户端向服务器请求数据。网络编程一般的尿性如下: 向服务器发出请求GET方式在地址栏放数据 POST方式通过相应对象设置键值,再发送 服务器根据请求,运算后返回结果 客户端根据服务器返回的状态、结果再次处理 输入输出流读啊读 过程中注意中文乱码问题 安卓中有一点值的注意的是:向服务

yytian9的博客 479

Android基础——网络编程

网络编程网络编程和数据解析是什么?WebView三级目录 网络编程和数据解析是什么? 网络编程指Android系统使用http协议和服务器交互,并对服务器返回的数据(xml、json)进行解析 WebView Web控件可以让我们在应用程序中嵌入浏览器,展示网页信息 修改activity_main.xml: 三级目录 ...

松仔Log的博客 2566

android网络编程上传xml,Android 网络编程之 HttpURLConnection

Android 网络编程之 HttpURLConnectionAndroid,网络编程,HttpURLConnection 是 Android 平台上常用的网络编程的工具类,相比 HttpClient,HttpURLConnection 得到了 Android 官方很好的支持和推荐。下面是一些简单的介绍和知识的整理。这是一个简单的使用 HttpURLConnection 进行 GET 请求的代码。...

weixin_39603622的博客 135

安卓网络编程

这几天一直在搞跟网络编程相关的东西,这里整理了一下关于socket网络编程以及http协议的基本用法。省的自己以后再用或者其他人学习方便。首先是基于socket的网络编程android的网络编程部分,基本上和java的网络编程时一样的,基本上也分成两种,一种是基于socket的,另外一种是基于http协议的。

xxpr_ybgg的博客 693
上一篇: Android 网络编程(二) HTTP协议解析
下一篇: Android 蓝牙Mesh组网代码详解
谦行
博客等级 码龄11年 182粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值