Android学习笔记:HttpClient和HttpURLConnection

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

在Android开发中网络请求是最常用的操作之一,Android SDK中对HTTP(超文本传输协议)也提供了很好的支持,这里包括两种接口:
(1)标准Java接口(java.NET)——HttpURLConnection,可以实现简单的基于URL请求、响应功能;
(2)Apache接口(org.apache.http)——HttpClient,使用起来更方便更强大;


一、HttpClient

HttpClient是Apache Jakarta Commons下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。

由于HttpClient存在的API数量过多、扩展困难等缺点,Android团队越来越不建议我们使用这种方式。终于在Android6.0系统中,HttpClient的功能被完全移除了,标志着此功能正式被弃用。Google建议使用HttpURLConnection进行网络访问操作。

Android SDK中包含了HttpClient。Android6.0版本直接删除了HttpClient类库。如果仍想使用它,解决方法就是在相应moudle下的build.gradle中加入如下代码:

android{
   
   
	useLibrary 'org.apache.http.legacy'
}
1、使用步骤

1、创建HttpClient对象。
2、创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3、如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HttpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4、调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5、调用HttpResponse的getAllHeaders()、getHeader(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可以获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6、释放连接。无论方法是否成功,都必须释放连接。

2、HttpClientDemo

项目简介:使用HttpClient访问聚合API,查询手机归属地
项目地址:https://github.com/ambition-hb/HttpClientDemo
项目图示:
在这里插入图片描述
部分代码如下:

/**
 * 使用HttpClient访问聚合API,查询手机归属地
 */

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
   
   

    private Button btn_get;
    private Button btn_post;
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_get = (Button)findViewById(R.id.btn_get);
        btn_post = (Button)findViewById(R.id.btn_post);
        tv = (TextView)findViewById(R.id.tv);
        btn_get.setOnClickListener(this);
        btn_post.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
   
   
        switch(v.getId()){
   
   
            case R.id.btn_get:
                new Thread(new Runnable() {
   
   
                    @Override
                    public void run() {
   
   
                        useHttpClientGet("http://apis.juhe.cn/mobile/get?phone=13429667914&key=fef8795fcfa0a1977582d8c31b529112");
                    }
                }).start();
                break;
            case R.id.btn_post:
                new Thread(new Runnable() {
   
   
                    @Override
                    public void run() {
   
   
                        useHttpClientPost("http://apis.juhe.cn/mobile/get?");
                    }
                }).start();
                break;
            default:
                break;
        }
    }

    private HttpClient createHttpClient()
HttpURLConnection和HttpClient获取Json数据 Android中提供的HttpURLConnection(JDK自带)和HttpClient(Apache提供)接口可以用来开发HTTP程序。 服务器端有如下json数据 [ { "image": "http://222.22.254.223:8080/web/a.jpg", "title": "新闻标题1", "content": "新闻内容1", "conut": "跟帖人数1" }, { 阅读详情

相关推荐

Android实现HTTPS请求的HttpClient编程

在Android 6.0及以上的版本中,系统不再默认支持使用HttpClient,所以我们需要使用HttpClient Android库提供的兼容版。值得注意的是,在Android 9及以上的版本中,默认不允许在主线程中进行网络请求,所以在实际开发中,建议将网络请求放在异步任务或者单独的线程中进行。通过以上步骤,我们可以在Android应用程序中使用HttpClient库来实现HTTPS请求。以上代码中,我们使用HttpGet对象来创建一个GET请求,发送给指定的URL。

2301_79326254的博客 440

ubuntu20.04下dsp-slam的运行配置

DSP-SLAM:具有深度形状先验的面向对象的 SLAM

baidu_38431960的博客 3159

【星火】海思HI3516C开发板实战:基于LVGL与MPP库的行车记录仪/电子显微镜方案

本文详细介绍了基于海思HI3516CV500开发板,结合LVGL图形库与海思MPP媒体处理平台,实现行车记录仪与电子显微镜方案的完整实战过程。内容涵盖从系统环境搭建、驱动配置到应用开发的全流程,重点解析了MPP视频流处理管道与LVGUI界面协同工作的核心机制,为嵌入式音视频开发提供了可复用的参考方案。

weixin_42126677的博客 162

FPGA—DHT11数字温湿度传感器

1. DH1T11温湿度传感器与DS18B20温湿度传感器非常类似,都是严格按照时序要求写代码。建议可以比较学习。2. 显示温度与湿度部分的数据处理,采用 X10 进行在数码管上的移一位显示,配合了数码管小数部分的显示特点又区分了温度与湿度。3. 程序是按照一个接一个状态及顺序跳转的,建议使用状态机。说明:本人使用的是野火家Xilinx Spartan6系列开发板及配套教程,以上内容如有疑惑或错误欢迎评论区指出,或者移步B站观看野火家视频教程。

m0_72885897的博客 4780

图数据挖掘 ECC K-core core number truss number clique

K-core:什么叫k-core,给定一个正整数k(k>=0),k-core是一个G的最大子图(也就是说k-core是一个图的限制),将这个子图定义为Hk,对于Hk中的每个顶点v,他的度数都是大于等于k的。 k-core是内嵌的,如下图所示,集合{ABCD}是H3,也就是3-core的子图。而集合{ABCDE}是H2,也就是2-core的子图,集合{ABCDEGF}是H1,也就是1-core的子图,而从集合的角度来讲H3<H2<H1。 core number:什么叫kcor

weixin_45193103的博客 1686

unity转微信小游戏:使用CDN加载游戏(微信开发者工具云开发CDN)

unity转微信小游戏:使用CDN加载游戏(微信开发者工具云开发CDN)

会潜水的小火龙的博客 3072

Deepseek接入QQ机器人:实现拟人化概率回复的完整指南

大语言模型API正在快速改变即时通讯工具的交互方式。通过标准化的OpenAI兼容接口,开发者可以将Deepseek等AI服务嵌入到QQ机器人等IM场景中,实现自然语言对话能力。其核心原理在于事件驱动架构:消息接收层通过OneBot协议获取群聊内容,业务层利用概率过滤与冷却机制控制回复节奏,再由大模型生成拟人化文本。这种设计不仅避免了机器人刷屏,还能通过系统提示词塑造性格,营造真实的社群陪伴体验。适用于粉丝群互动、内容订阅、小规模客服等场景,同时支持多群独立配置、关键词加权回复及上下文记忆扩展。在实际工程中,

weixin_29051245的博客 462

还在纠结二层交换机和三层交换机的区别?这篇文章帮你讲明白!

你好,这里是网络技术联盟站,我是瑞哥。公众号后台有小伙伴想要写一篇文章具体介绍一下二层交换机和三层交换机,此类的文章,之前写过几篇,今天瑞哥再写一篇,希望对大家有所帮助!

网络技术联盟站 4442

PCL 建筑物点云立面和平面分割提取【2025最新版】

在建筑物点云中,立面点和平面点的法向量存在明显的差异,根据法向量在Z方向的分量设置相应得阈值即可实现立面点与平面点的分割。

点云侠的博客 1962

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: Android学习笔记:Android-Async-Http
下一篇: Android学习笔记:SharedPreferences
浩比浩比
博客等级 码龄12年 395粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值