在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文件添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

下面是具体的例子:

1.使用HttpClient来执行GET调用

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

  1. package com.lingdududu.http;
  2. import java.io.InputStream;
  3. import org.apache.http.HttpResponse;
  4. import org.apache.http.HttpStatus;
  5. import org.apache.http.client.HttpClient;
  6. import org.apache.http.client.methods.HttpGet;
  7. import org.apache.http.impl.client.DefaultHttpClient;
  8. import android.app.Activity;
  9. import android.os.Bundle;
  10. import android.util.Log;
  11. public class HttpGetActivity extends Activity {
  12. String uri = "http://developer.android.com/";
  13. final String TAG_STRING = "TAG";
  14. @Override
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. try {
  19. //得到HttpClient对象
  20. HttpClient getClient = new DefaultHttpClient();
  21. //得到HttpGet对象
  22. HttpGet request = new HttpGet(uri);
  23. //客户端使用GET方式执行请教,获得服务器端的回应response
  24. HttpResponse response = getClient.execute(request);
  25. //判断请求是否成功
  26. if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  27. Log.i(TAG_STRING, "请求服务器端成功");
  28. //获得输入流
  29. InputStream  inStrem = response.getEntity().getContent();
  30. int result = inStrem.read();
  31. while (result != -1){
  32. System.out.print((char)result);
  33. result = inStrem.read();
  34. }
  35. //关闭输入流
  36. inStrem.close();
  37. }else {
  38. Log.i(TAG_STRING, "请求服务器端失败");
  39. }
  40. } catch (Exception e) {
  41. // TODO Auto-generated catch block
  42. e.printStackTrace();
  43. }
  44. }
  45. }

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

2.使用HttpClient来执行POST调用

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

  1. package com.androidbook.services.httppost;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.NameValuePair;
  9. import org.apache.http.client.HttpClient;
  10. import org.apache.http.client.entity.UrlEncodedFormEntity;
  11. import org.apache.http.client.methods.HttpPost;
  12. import org.apache.http.impl.client.DefaultHttpClient;
  13. import org.apache.http.message.BasicNameValuePair;
  14. import android.app.Activity;
  15. import android.os.Bundle;
  16. public class HttpPostActivity extends Activity {
  17. String uri = "http://developer.android.com/";
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.main);
  22. BufferedReader in = null;
  23. try {
  24. HttpClient client = new DefaultHttpClient();
  25. HttpPost request = new HttpPost("http://code.google.com/android/");
  26. //使用NameValuePair来保存要传递的Post参数
  27. List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
  28. //添加要传递的参数
  29. postParameters.add(new BasicNameValuePair("id", "12345"));
  30. postParameters.add(new BasicNameValuePair("username", "dave"));
  31. //实例化UrlEncodedFormEntity对象
  32. UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
  33. postParameters);
  34. //使用HttpPost对象来设置UrlEncodedFormEntity的Entity
  35. request.setEntity(formEntity);
  36. HttpResponse response = client.execute(request);
  37. in = new BufferedReader(
  38. new InputStreamReader(
  39. response.getEntity().getContent()));
  40. StringBuffer string = new StringBuffer("");
  41. String lineStr = "";
  42. while ((lineStr = in.readLine()) != null) {
  43. string.append(lineStr + "\n");
  44. }
  45. in.close();
  46. String resultStr = string.toString();
  47. System.out.println(resultStr);
  48. } catch(Exception e) {
  49. // Do something about exceptions
  50. } finally {
  51. if (in != null) {
  52. try {
  53. in.close();
  54. } catch (IOException e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. }
  59. }
  60. }

本文转自 lingdududu 51CTO博客,原文链接:

http://blog.51cto.com/liangruijun/803097

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

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

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

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

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

  3. apk开发用什么语言!从入门到精通的Android进阶学习笔记整理,醍醐灌顶!

    行业激烈变化时,恰恰是机会最多的时候 坦白讲,许多人骨子里害怕变化和竞争. 其实大可不必. 一来,怕也没用嘛.二来,变化越快,组合要素增加了,意味着新的工作机会越多. 就像传统媒体VS新媒体. 放在1 ...

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

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

  5. 安卓系统培训!从入门到精通的Android进阶学习笔记整理,已整理成文档

    热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高级开发中必须掌握的技能.本篇重点讲解热修复热修复的原理,各大热修复框架的比较,以及自身产品中热修复功能的实践. 一.什么是热修复? ...

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

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

  7. 【Android进阶学习】设置透明效果的三种方法

    1.使用Android系统自带的透明效果资源 <android:backgroundandroid:background="@android:color/transparent&quo ...

  8. Android中的AOP编程之AspectJ实战实现数据埋点

    文章背景 最近在给某某银行做项目的时,涉及到了数据埋点,性能监控等问题,那我们起先想到的有两种方案,方案之一就是借助第三方,比如友盟.Bugly等,由于项目是部署在银行的网络框架之内的,所以该方案不可 ...

  9. Android进阶学习-自定义主题(3)

    效果图,略骚,不要笑!!! 我们使用的是这么一张图片,图片是静态的,我们通过旋转动画去实现加载的效果. 首先我们看下,一个加载窗口需要些什么.一个ImageVIew和一个TextView,那么我们就有 ...

最新文章

  1. bgp选路原则【第二部】
  2. ETL AUTOMATION介绍
  3. 用户测评 | EDAS Serverless 上手体验 1
  4. 22行代码AC_试题 历届试题 油漆面积【解题报告】
  5. linux查看文件句柄阀值,prometheus 告警指标
  6. MPU6050开发 -- 卡尔曼滤波(转)
  7. P5212-SubString【LCT,SAM】
  8. 解决在工具栏Chrome图标上点击右键会显示“常去网站”和“最后关闭网站”的问题
  9. linux 升级g++ [错误:unrecognized command line option “-std=c++11”]
  10. 常见排序算法之选择排序
  11. python解释器源码下载_深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!...
  12. 【历史】衣米魔兽怀旧服发展历史事件以及衣米魔兽重要玩家传记
  13. 项目经理要具备的三种能力
  14. 伺服舵机带参方向控制
  15. warning: #61-D: integer operation result is out of range
  16. 网页证书错误怎么回事? 证书错误如何解决
  17. python关于二手房的课程论文_python爬取链家二手房信息
  18. 【安全牛】一起来打靶第二周
  19. Android SDK是什么?
  20. ESP8266-Arduino编程实例-TEMT6000环境光传感器驱动

热门文章

  1. activity的启动窗口
  2. java.lang包—对象基类Object
  3. Java集合—TreeMap底层原理
  4. 《学习之道》第六章关注过程,亦培养习惯
  5. tomcat JRE_HOME
  6. 怎样让你的安卓手机瞬间变Firefox os 畅玩firefox os 应用
  7. java中怎么进行字符串替换?
  8. 40 个顶级 jQuery 图片、内容滑块和幻灯片
  9. 未能加载文件或程序集“Antlr3.Runtime”或它的某一个依赖项。参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))解决方法。...
  10. Stars HDU 1541