文档章节

android上网1,使用HttpUrlConnection

c
 chuiyuan
发布于 2014/04/25 22:20
字数 711
阅读 449
收藏 6

    

    在这里我们用HttpUrlConnection进行数据 的接收和发送。传输时有两个选择,POST  和GET。两个方法是有不同的。 

程序 整体架构 

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.http_demo);
		
		textView =(TextView )findViewById(R.id.textView);
		getBtn =(Button)findViewById(R.id.getBtn);
		postBtn =(Button)findViewById(R.id.postBtn);
		
		OnClickListener listener = new OnClickListener(){
			public void onClick(View v) {
				int id = v.getId();
				if (id ==R.id.postBtn){
					doPost();
				}else{
					doGet();
				}
			}	
		};
		
		getBtn.setOnClickListener(listener);
		postBtn.setOnClickListener(listener);
	}

一。使用GET 

   在HTTP 中,GET常常用来查询数据。它的参数 可以直接 写在URL中,如http:192.168.0.1:8080/index.jsp?id=123456,

URL中就有  id=123456这个 参数 。GET也是httpURLConnection默认的连接方法。

使用HttpUrlConnection的GET要下面的几个步骤 

  1. 新建 一个URL

  2. 得到 HttpUrlConnection对象 

  3. 设置这个连接对象 

  4. 得到输入流

  5. 从流中读取返回的结果 ,进行处理

  6. close流

具体的如下 

1 . 新建 url

URL就是我们说的网址。如下。

URL  url = new URL ("http ://....");

2. 得到连接对象 

不是用new ,而是用

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

3. 设置连接对象 

(1)允许读取

URLConnection.setDoInput( boolean new Value);

(2)允许写入

URLConnection.setDoOutput (boolean new Value);

(3) 设置请求方法

HttpURLConnection.setRequestMethod( "GET") throws ProtocolException 

(4) 设置超时时间

URLConntection.setConnectionTimeout( int timeout);

(5) 设置是否允许使用缓存 

URLConnection.setUseCache (boolean new Value);


4. 得到输入流

URLConnection.getInputStream ()throws IOException ,

一般情况 下,我们得到输入 流后还会对它进行包装,以提高效率。


5. 从流中读取数据 

很多方法,比较推荐 BufferReader 的readLine()、

6. close()

try {
			URL url = new URL("http://www.oschina.net/blog");
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
			connection.setDoInput(true);
			connection.setDoOutput(true);
			connection.setConnectTimeout(1000);
			
			connection.setRequestMethod("GET");
			connection.setUseCaches(true);
			
			InputStreamReader isr = new InputStreamReader(connection.getInputStream());
			BufferedReader br= new BufferedReader(isr );
			
			String tempResult =null;
			String result =null;
			
			while ((tempResult=br.readLine())!=null){
				result+= tempResult+"\n";
			}
			
			textView.setText(result);
			br.close();
			isr.close();	
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}


二,使用POST

    POST与GET 不同,它的参数 不能直接 写在URL中,而是在 HTTP  的包体中,具体实现 就是用 OutputStream 写数据 ,其它的和GET差不多、

步骤 如下

  1. 新建 URL 对象 

  2. 获得 HttpURLConnection  对象 ,

  3. 设置连接对象 ,其中请求方法是  POST

  4. 获得输出流,写入数据 

  5. 获得输入 流,读取返回的数据 

    getInputStream------>InputStreamReader ---->BufferedReader.

  6. close

  不同的地方,在4中得到输出 流,方法为

HttpURLConnection.getOutputStream () throws IOException

写入数据 时候 要编码 ,方法为

URLEcoder.encode( String s ,String enc ) throws UnsupportedEncodeingException 

第一个参数 是要传递的内容 ,第二个是编码 方式 。

这个 方法将返回一个String ,这就是我们可以 在网上传输的数据了。

protected void doPost() {
		// TODO Auto-generated method stub
		try {
			URL url = new URL ("http://5billion.com.cn/post/php");
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
			connection.setRequestMethod("POST");
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setUseCaches(false);
			connection.connect();  //确认连接工作都完成 
			DataOutputStream dos = new DataOutputStream (connection.getOutputStream());
			String params = URLEncoder.encode("name=123456", "gb2312");
			dos.write(params.getBytes());
			dos.flush();
			dos.close();
			
			InputStreamReader isr = new InputStreamReader (connection.getInputStream());
			BufferedReader br = new BufferedReader (isr );
			String tempResult =null;
			String result =null;
			
			while((tempResult=br.readLine())!=null){
				result =result +tempResult+"\n";
			}
			
			textView.setText(result);
				
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}




© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 92
码字总数 40993
作品 0
海淀
android网络类型 wap代理设置

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

caikezhan
2012/07/19
0
1
[Android官方开发者博客.翻译]Android的HTTP客户端

Android的HTTP客户端 原文地址: http://android-developers.blogspot.com/2011/09/androids-http-clients.html [本文由来自Dalvik团队的Jesse Wilson提交。--Tim Bray] 大多数需要网络连接的......

李海珍
2012/11/25
0
0
Android利用Http下载文件

Android利用Http下载文件 一、场景 下载存文本文件和下载如mp3等大容量的文件 界面 二、代码编写 1.AndroidMainfest.xml中配置 主要是解决网络权限和写SDCard的权限 Java代码 <?xml version=...

丁佳辉
2015/09/23
0
0
HttpClient和HttpURLConnection的区别

Android 提供两个HTTP客户端,分别是HttpURLConnection客户端和Apache的HttpClient,android的AndroidHttpClient是对HttpClient的实现。这两个HTTP客户端都支持HTTPS协议、流媒体的上传和下载...

Callen
2015/08/09
0
0
说说在 Android 中如何发送 HTTP 请求

客户端会向服务器发出一条 HTTP 请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对这些数据进行解析与处理。 1 HttpURLConnection 可以使用 HttpURLConnection(官方推荐) 来发...

deniro
06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周三乱弹 —— 公司女同事约我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享水木年华的单曲《蝴蝶花(2002年大提琴版)》 《蝴蝶花(2002年大提琴版)》- 水木年华 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
8分钟前
12
4
Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
5
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
3
0
docker中安装了RabbitMQ后无法访问其Web管理页面

在官网找了"$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management"这条安装命令,在docker上安装了RabbitMQ,,结果输入http://localhost:8080并不......

钟然千落
今天
4
1
spring-cloud | 分布式session共享

写在前面的话 各位小伙伴,你们有福了,这一节不仅教大家怎么实现分布式session的问题,还用kotlin开发,喜欢kotlin的小伙伴是不是很开心! 以前在写Android的时候,就对客户端请求有一定的认...

冯文议
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部