在Android开发中,Android SDK附带了Apache的HttpClient,它是一个完善的客户端。它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTP GET和HTTP POST调用。

HTTP工作原理:

1.客户端(一般是指浏览器,这里是指自己写的程序)与服务器建立连接

2.建立连接后,客户端向服务器发送请求

3.服务器接收到请求后,向客户端发送响应信息

4.客户端与服务器断开连接

HttpClient的一般使用步骤:

1.使用DefaultHttpClient类实例化HttpClient对象

2.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。

3.调用execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。

4.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。

最后记得要在AndroidManifest.xml文件添加网络权限

下面是具体的例子:

1.使用HttpClient来执行GET调用

在LogCat窗口就能看到输出的信息

packagecom.lingdududu.http;

importjava.io.InputStream;

importorg.apache.http.HttpResponse;

importorg.apache.http.HttpStatus;

importorg.apache.http.client.HttpClient;

importorg.apache.http.client.methods.HttpGet;

importorg.apache.http.impl.client.DefaultHttpClient;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.util.Log;

publicclassHttpGetActivityextendsActivity {

String uri ="http://developer.android.com/";

finalString TAG_STRING ="TAG";

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

try{

//得到HttpClient对象

HttpClient getClient =newDefaultHttpClient();

//得到HttpGet对象

HttpGet request =newHttpGet(uri);

//客户端使用GET方式执行请教,获得服务器端的回应response

HttpResponse response = getClient.execute(request);

//判断请求是否成功

if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

Log.i(TAG_STRING,"请求服务器端成功");

//获得输入流

InputStream  inStrem = response.getEntity().getContent();

intresult = inStrem.read();

while(result != -1){

System.out.print((char)result);

result = inStrem.read();

}

//关闭输入流

inStrem.close();

}else{

Log.i(TAG_STRING,"请求服务器端失败");

}

}catch(Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

使用HTTP GET调用有一个缺点就是,请求的参数作为URL一部分来传递,以这种方式传递的时候,URL的长度应该在2048个字符之内。如果超出这个这范围,就要使用到HTTP POST调用。

2.使用HttpClient来执行POST调用

使用POST调用进行参数传递时,需要使用NameValuePair来保存要传递的参数。NameValuePair封装了一个键/值组合。另外,还需要设置所使用的字符集。

packagecom.androidbook.services.httppost;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.util.ArrayList;

importjava.util.List;

importorg.apache.http.HttpResponse;

importorg.apache.http.NameValuePair;

importorg.apache.http.client.HttpClient;

importorg.apache.http.client.entity.UrlEncodedFormEntity;

importorg.apache.http.client.methods.HttpPost;

importorg.apache.http.impl.client.DefaultHttpClient;

importorg.apache.http.message.BasicNameValuePair;

importandroid.app.Activity;

importandroid.os.Bundle;

publicclassHttpPostActivityextendsActivity {

String uri ="http://developer.android.com/";

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

BufferedReader in =null;

try{

HttpClient client =newDefaultHttpClient();

HttpPost request =newHttpPost("http://code.google.com/android/");

//使用NameValuePair来保存要传递的Post参数

List postParameters =newArrayList();

//添加要传递的参数

postParameters.add(newBasicNameValuePair("id","12345"));

postParameters.add(newBasicNameValuePair("username","dave"));

//实例化UrlEncodedFormEntity对象

UrlEncodedFormEntity formEntity =newUrlEncodedFormEntity(

postParameters);

//使用HttpPost对象来设置UrlEncodedFormEntity的Entity

request.setEntity(formEntity);

HttpResponse response = client.execute(request);

in =newBufferedReader(

newInputStreamReader(

response.getEntity().getContent()));

StringBuffer string =newStringBuffer("");

String lineStr ="";

while((lineStr = in.readLine()) !=null) {

string.append(lineStr +"\n");

}

in.close();

String resultStr = string.toString();

System.out.println(resultStr);

}catch(Exception e) {

// Do something about exceptions

}finally{

if(in !=null) {

try{

in.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

android 5.1 httpclient,【Android进阶学习】Http编程之HttpClient相关推荐

  1. Android程序员该如何进阶学习以预防35岁中年职场危机?

    一.大家都在担心的问题 不只是Android,很多程序员都在担心业界的"35岁危机",担心自己到35岁后就被市场淘汰. 比如最近就经常被大家问到这样的问题,比如这样的: 大佬好,目 ...

  2. 【Android进阶学习】Http编程之HttpClient

    在Android开发中,Android SDK附带了Apache的HttpClient,它是一个完善的客户端.它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTP GET ...

  3. java 高级编程进阶_JAVA高级编程之hibernate进阶学习

    二级缓存 hibernate的session缓存 在事务级别进行持久化数据的缓存操作. 当然,也有可能分别为每个类(或集合),配置集群.或 JVM 级别(SessionFactory 级别)的缓存.你 ...

  4. 从C语言学习谈编程之路

    不知不觉,接触计算机编程已经5年了.从刚上大学接触C语言一路走来,感触颇多.刚开始学C语言,从懵懵懂懂.跌跌撞撞到趋于熟悉.逐渐掌握,这中间有太多坎坷.再到学习C++.Java,走向Android开发 ...

  5. Linux学习——网络编程之TCP/IP协议原理

    小知识 设置ulimit值(Linux文件句柄数量)永久生效 新浪博客[转] 设置ulimit值(Linux文件句柄数量)永久生效_祥子_新浪博客,祥子,http://blog.sina.com.cn ...

  6. android java服务,Android进阶学习必会:Java Binder中的系统服务

    前言 这个知识点是Android进阶学习必须掌握的知识点之一,也是高阶Android架构师经常问到的点.在这里分想给大家,希望对大家的工作和学习有所帮助.喜欢本文的记得点赞关注哦~ 在前面的Andro ...

  7. 腾讯T2大牛亲自讲解!Android开发唯一的出路:进阶学习

    ##前言 近来,互联网公司"内卷"风暴甚嚣尘上,越来越多的人开始讨论这个问题,这个现象在知乎的反应尤其明显,相关问题多次上了热榜,关注者和浏览量都非常的高. 在"内卷&q ...

  8. 吹爆系列:教科书级别的Android音视频入门进阶学习手册,学完我成功“挤进”了抖音音视频开发岗

    Android开发工作两年,真的是感觉Android应用层开发没什么前景了,于是打算在网络安全,智能硬件,音视频这几个方向发展,考虑了一段时间,最终决定选择音视频.理由就不说了,既然选择了就要好好深耕 ...

  9. android进阶知识总结,Android进阶学习有哪些知识点

    Android进阶学习有哪些知识点 发布时间:2020-07-29 12:50:39 来源:亿速云 阅读:114 作者:Leah 本篇文章给大家分享的是有关Android进阶学习有哪些知识点,小编觉得 ...

  10. Android八大模块进阶学习笔记(性能优化、百大框架、高级UI、Flutter、Kotlin...)

    今年来,Android开发行业的就业形势愈加严峻,无论刚刚入门Android学习没有头绪的.还是开发多年想要突破薪资范畴的,都需要跳出编码和业务的局限,学会选型.扩展, 提升编程思维,建立良好的职业规 ...

最新文章

  1. OpenCV 霍夫圆检测
  2. 程序员的4种心态与4种将来
  3. 念数字python_我是怎样利用python PIL将图片数字读出来的?
  4. Strtus2工作流程及原理
  5. 你会使用回调函数吗?
  6. java程序 扑克牌概率_java – 最简单的扑克牌评估算法
  7. 读取和设置SPFIELD的值
  8. MCSA Windows Server 2016 Complete Study Guide, 2nd Edition 免积分下载
  9. 项目管理能力提升四要素
  10. 洛谷-P1427-小鱼的数字游戏
  11. 数字电路(4)门电路(三)
  12. 2018APP推广计划方案(完整版)
  13. UI设计必掌握的软件之一:Axure!
  14. 2.模仿小米通讯录的快速索引demo
  15. 【爬虫】批量下载B站收藏夹视频 - Python
  16. 天津大学计算机组成原理,天津大学计算机学院计算机组成原理复习材料.docx
  17. 树的直径,树的中心,树的重心
  18. c语言一般用大写字母定义什么,c语言程序格式是什么
  19. Java MD5和SHA256等常用加密算法
  20. WARNING: Ignoring invalid distribution -ip 解决方案

热门文章

  1. 计算机软件毕业论文周记,软件毕业设计周记.docx
  2. 车辆纵向mpc控制器
  3. python培训学费多少钱-福州Python培训大概多少钱?
  4. 计算机主板时钟,电脑主板时钟电路工作原理
  5. TCP/IP协议详解-卷一(心得一)
  6. VC编程读取文本数据
  7. Uniapp微信雪糕刺客单页小程序源码
  8. border边框属性的拆开方式 border按三要素来拆开 border按方向来拆开
  9. 固定资产管理系统如何解决企业固定资产管理混乱的问题?
  10. C++ 信息管理系统