原文地址:http://liangruijun.blog.51cto.com/3061169/803097

在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对象,代表一个Http客户端
  20. HttpClient getClient = new DefaultHttpClient();
  21. //第二步:得到HttpGet对象,代表请求的具体内容
  22. HttpGet request = new HttpGet(uri);
  1. //第三步:执行请求。使用HttpClient的execute方法,执行刚才构建的请求
  2. HttpResponse response = getClient.execute(request);
  3. //判断请求是否成功
  4. if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  5. Log.i(TAG_STRING, "请求服务器端成功");
  6. //获得输入流
  7. //第四步: 获取HttpResponse中的数据
  8. InputStream  inStrem = response.getEntity().getContent();
  9. int result = inStrem.read();
  10. while (result != -1){
  11. System.out.print((char)result);
  12. result = inStrem.read();
  13. }
  14. //关闭输入流
  15. inStrem.close();
  16. }else {
  17. Log.i(TAG_STRING, "请求服务器端失败");
  18. }
  19. } catch (Exception e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. }
  23. }
  24. }

使用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对象,代表客户端
  25. HttpClient client = new DefaultHttpClient();
  26. //第二步:创建HttpPost请求
  27. HttpPost request = new HttpPost("http://code.google.com/android/");
  28. //第三步:创建HttpPost请求体,使用NameValuePair来保存要传递的Post参数
  29. List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
  30. //添加要传递的参数
  31. postParameters.add(new BasicNameValuePair("id", "12345"));
  32. postParameters.add(new BasicNameValuePair("username", "dave"));
  33. //实例化UrlEncodedFormEntity对象
  34. UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
  35. postParameters);
  36. //使用HttpPost对象来设置UrlEncodedFormEntity的Entity
  37. request.setEntity(formEntity);
  38. //第四步:执行请求,获得HttpServer的响应
  39. HttpResponse response = client.execute(request);
//第五步:获取HttpResponse中的数据
  1. in = new BufferedReader(
  2. new InputStreamReader(
  3. response.getEntity().getContent()));
  4. StringBuffer string = new StringBuffer("");
  5. String lineStr = "";
  6. while ((lineStr = in.readLine()) != null) {
  7. string.append(lineStr + "\n");
  8. }
  9. in.close();
  10. String resultStr = string.toString();
  11. System.out.println(resultStr);
  12. } catch(Exception e) {
  13. // Do something about exceptions
  14. } finally {
  15. if (in != null) {
  16. try {
  17. in.close();
  18. } catch (IOException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. }
  23. }
  24. }

Android HttpClient用法相关推荐

  1. 【转】 Android - LayoutInflate用法

    [转自]http://blog.csdn.net/scut1135/article/details/7055461 通俗的说,inflate就相当于将一个xml中定义的布局找出来. 因为在一个Acti ...

  2. MTK驱动(77)---Android getevent用法

    Android getevent用法 getevent命令用法如下: Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [ ...

  3. 关于AsyncHttpClient的cz.msebera.android.httpclient.Header

    android-async-http-1.4.9版本去除了httpclient的东西,所以会出现Header[] headers找不到的错误,这里分享下解决办法: 我们先看看官方:https://gi ...

  4. 【androidx86 5.1.1】Android HttpClient请求过程解析(上)

    Android HttpClient请求过程解析 前言:很久没有写源码解析相关的文章了,所谓"三天不写,上房揭瓦",这都仨月啦!前段时间忙着发版,经理有别的事情忙,就把管理发版的事 ...

  5. Android inflater用法

    Android inflater用法 简介 具体作用 获取layoutInflater的三种方式 源码查看 返回值结果 注意 简介 在实际的开发中layoutInflater这个类的主要的主要的作用类 ...

  6. android plurals用法

    参考 android plurals用法 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的,所以android提供了方法getQuantityString(),它可以用来为你选择合适 ...

  7. android plurals用法(单复数)

    0.相关文章 android plurals用法 Android中的string资源占位符及Plurals string 1.使用 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的, ...

  8. Android.mk 用法介绍

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  9. android五大布局的用法,android:stretchColumns用法

    TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果.本文主要介绍TableLayout的基本使用 ...

  10. Android HttpClient post MultipartEntity - Android 上传文件

    转自[http://blog.csdn.net/hellohaifei/article/details/9707089] 在Android 中使用HttpClient,MultipartEntity ...

最新文章

  1. Vue $createElement
  2. 成立 5 周年:一文览尽 Facebook 人工智能研究院历年重要成果
  3. 动态规划备忘录方法递归方法
  4. 树莓派命令连接wifi_树莓派连接无线网wifi配置方法
  5. Python之路【第十篇】:索引与切片的不同
  6. Fiori configuration edit also needs enqueue
  7. 外媒:特斯拉申请新商标 寻求进入餐饮业
  8. Kudu : 三种Fulsh Mode
  9. python 输出颜色的设置
  10. 安卓系统原生定位不可用修改
  11. 基于PHP+MySQL的网上图书店商城在线销售系统
  12. 矩阵转置+矩阵相加(三元组)
  13. 悬臂梁振动方程及仿真
  14. 如何拼局域网所有ip_在windows命令行批量ping局域网内IP
  15. 一起学Kubernetes——设计概览
  16. DeleteRow()
  17. 腾讯技术跨越2019
  18. 【值得读】自动机器学习: 最新进展综述与开放挑战 | AutoML
  19. 小点评《实战SAP程序开发》-电子工业出版社 北京
  20. 使用哈夫曼编码实现数据的压缩和解压(java版)

热门文章

  1. 计算机毕业设计django基于python智能在线考试阅卷系统(源码+系统+mysql数据库+Lw文档)
  2. proteus仿真电路连线
  3. 中国保安服务行业发展状况及前景预测分析报告2022-2028年版
  4. lua luarocks luacheck linux安装
  5. 迈高图手机版_迈高图(地图数据器)|迈高图(地图数据器) v2.11.8.0官方版 - 系统天堂...
  6. 彻底禁止Win10自动更新工具Windows Update Blocker v1.5 汉化版
  7. 时间序列谐波分析(HANTS)的MATLAB实现
  8. FusionChartsFree调用json数据的简单例子
  9. java简单封装FusionChartsFree.
  10. 2020年中国电力线载波通信行业发展现状及竞争格局分析,国家电网持续推进电网转型升级,配电自动化覆盖率达到90%「图」