android上网1,使用HttpUrlConnection
博客专区 > chuiyuan 的博客 > 博客详情
android上网1,使用HttpUrlConnection
chuiyuan 发表于4年前
android上网1,使用HttpUrlConnection
  • 发表于 4年前
  • 阅读 400
  • 收藏 6
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: HTTP - hyper text transfer protocol

    

    在这里我们用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();
		}
	}




共有 人打赏支持
粉丝 9
博文 91
码字总数 40993
×
chuiyuan
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: