文档章节

android上网 2,使用HttpClient传输

c
 chuiyuan
发布于 2014/04/26 16:05
字数 796
阅读 250
收藏 2

一 。使用HttpClient 进行GET连接

  1. 新建 URI

  2. 新GET  请求

  3. 新建 HTTP 客户端

  4. 使用客户端执行操作

  5. 返回处理的结果 

1. URI,这里的URI并不是URI类,而是String类型的uri字符。

String uri = "http://";

2.  新建 GET 请求

只要用HttpGet类就可以了

HttpGet.HttpGet (String uri );

3. 新建 Http 客户端

一般使用默认的就可以了

 DefaultHttpClient.DefaultHttpClient ()

4. 使用客户端执行请求

  HttpClient.execute (HttpUriRequest request ) throws IOException ,ClientProtocolException

这个 方法返回的是HttpResponse类型,也就是响应、。

5. 处理响应

得到了HttpResponse后,在网格上的就完成 了,现在在本地进行响应处理。

HttpResponse.getStatusLine () ;//得到状态行
HttpResponse.getEntity () ;// 得到结果

例子:

protected void doGet() {
		// TODO Auto-generated method stub
		//新建 URL
		String url="http://5billion.com.cn/post.php?name=abcd";
		//新建 GET 请求
		HttpGet httpRequest = new HttpGet (url );
		//新建 http客户端
		HttpClient httpClient = new DefaultHttpClient ();
		//执行请求返回结果 
		try {
			HttpResponse httpResponse = httpClient.execute(httpRequest);
			//判断结果 
			if (httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				//得到结果 的类型
				String result = EntityUtils.toString(httpResponse.getEntity());
				textView.setText(result);
			}else {
				textView.setText("应答错误  :"+httpResponse.getStatusLine().toString());
			}
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}



二。使用HttpCLient进行POST连接

    使用POST连接与GET连接不同的地方参数 的传递。在POST中,参数 的传递用 NameValuePair 类,实质也就是HashMap。

     POST与GET不同的地方 在于请求的建立

1 。新建 HttpPost请求

HttpPost.HttpPost( String uri );

2.  新建 保存参数的数据 结构 

在POST中传递的是NameValuePair类,仅仅保存一个肯定是不够的,所以真正传递的是一个列表,表中每一个对象 都是一个NameValuePair。如下

新建 一个列表 来保存NameValuePair。

 List<NameValuePair> params = new ArrayList <NameValuePair >();
 //新建真正 的数据 ,以名值 对的形式保存
 BasicNameValuePair.BasicNameValuePair (String name ,String value );
 //将名值 对加入 到列表 中
 List.add(NameValuePair  object);

3. 为参数 设置编码 方式 

最后将之前 新建 好的List对象 加入 到HttpPost对象 中

UrlEncodedFormEntity.UrlEncodedFormEntity (List <?extends NameValuePair>parameters ,String encoding )throws UnsupportedEncodingException

第一个参数 是要编码 的参数 ,第二个是设置编码 的方式 ,可以使用HTTP.UTF_8,  HTTP,UTF_16


4. 将参数 加入 到请求中

HttpEntityEnclosingRequestBase.setEntity (HttpEntity entity );

接下来的工作就一样了

5.新建 http客户端

DefaultHttpClient.DefaultHttpClient ()

6. 使用客户端执行操作

HttpClient.execute (HttpUriRequest request ) throws IOException ,ClientProtocolException

7 处理响应

这里的处理要按应用的要求 来处理,如将结果以String 显示 

String result - ENtityUtils.toString (httpReqsponse.getEntity());
tv.setText (result );

例子

protected void doPost() {
		// TODO Auto-generated method stub
		//新建 一个URL
		String url ="http://www.baidu.com";
		//新建 POST类请求
		HttpPost httpRequest = new HttpPost(url );
		//新建 要传递的数据结构 
		List <NameValuePair>params = new ArrayList <NameValuePair >();
		//新建 键值对
		BasicNameValuePair pair1 = new BasicNameValuePair ("param","AaBbCcDdEe");
		//将数据 加入 到键值 对中
		params.add(pair1);
		
		try {
			//设置编码 方式 
			HttpEntity entity = new UrlEncodedFormEntity (params ,HTTP.UTF_8);
			httpRequest.setEntity(entity);
			//新建 http客户端
			HttpClient httpClient = new DefaultHttpClient ();
			//执行请求,得到响应
			HttpResponse httpResponse = httpClient .execute(httpRequest );
			//判断响应状态 是否成功
			if (httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				String result = EntityUtils.toString(httpResponse.getEntity());
				textView.setText(result);
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}


© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 92
码字总数 40993
作品 0
海淀
私信 提问
Android 使用自带的HttpClient进行https请求出现403的解决过程记录

出现的过程 最近在用程序模拟一个web站的https登录,然后进行一些后续操作的小玩意。先使用java程序写测试代码,测试通过移植到android。 java基于httpclient-4.3.1.jar开发。 android端使用...

atearsan
2014/03/05
0
1
[无线] 让Android支持cmwap上网

在有中国特色的 GPRS 接入方式背景下,时至今日,我们仍然不得不考虑 cmwap 用户上网的问题;虽然我们暂时找不到关于统计cmwap用户的确切使用比例,但是可以确定的是一些做的比较好的 Androi...

长平狐
2013/07/01
385
0
[无线] 让Android支持cmwap上网

在有中国特色的 GPRS 接入方式背景下,时至今日,我们仍然不得不考虑 cmwap 用户上网的问题;虽然我们暂时找不到关于统计cmwap用户的确切使用比例,但是可以确定的是一些做的比较好的 Androi...

长平狐
2012/11/19
60
0
android编写访问http的代码

android使用apache httpclient项目实现手机作为http客户端的调用。android使用的是最新的httpclient 4.0版本,网上很多国内的文档是3.x的,调用方式不一样。 httpclient有一个官方教程,见:...

xiahuawuyu
2012/08/06
0
0
android网络类型 wap代理设置

1、很多人都知道移动提供的两个不同的接入点,即:CMWAP 和 CMNET ,前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务的。它们在实现方式上并没有任何差别...

caikezhan
2012/07/19
0
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 风扇写着先生请自爱

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @蚂蚁哈哈哈 :分享陈奕迅的单曲《落花流水》 《落花流水》- 陈奕迅 手机党少年们想听歌,请使劲儿戳(这里) @车谷 :我发现每天上班都好困 ...

小小编辑
今天
50
5
centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
4
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
9
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部