Android网络编程---HttpURLConnection

1.HttpURLConnection的介绍

答:一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。
HttpURLConnection提供的API比较简单,但这同时也使得我们可以更加容易地去使用和扩展它。

继承自 URLConnection,抽象类,无法直接实例化对象。通过调用openCollection() 方法获得对象实例,默认是带gzip压缩的;

2.HttpURLConnection的使用步骤

  • 1.创建一个URL对象:
         URL url = new URL(http://www.baidu.com);
  • 2.调用URL对象的openConnection( )来获取HttpURLConnection对象实例:
         HttpURLConnection hrc= (HttpURLConnection) url.openConnection();
  • 3.设置HTTP请求使用的方法:GET或者POST,或者其他请求方式比如:PUT
         hrc.setRequestMethod(“GET”);
  • 4.设置连接超时,读取超时 的毫秒数,以及服务器希望得到的一些消息头
         hrc.setConnectTimeout(6*1000);
         hrc.setReadTimeout(6 * 1000);
  • 5.调用getInputStream()方法获得服务器返回的输入流,然后输入流进行读取了
         InputStream in = conn.getInputStream();
  • 6. 对输入流进行处理
  • 7.最后调用disconnect()方法将HTTP连接关掉
        hrc.disconnect();

PS:      除了以上外,有时还可能需要对响应码进行判断,比如200:
  if(conn.getResponseCode() != 200)

{

         //处理接收到的数据

}


还有,可能有时并不需要传递什么参数,而是直接去访问一个页面,可以直接用:
           final InputStream in = new URL(“url”).openStream();
                                        然后直接读流.

不过这个方法适合于直接访问页面的情况,底层实现其实也是   return openConnection().getInputStream(),

而且还不能设置一些 请求头的东东.

eg.

<pre name="code" class="java">package com.exe.webtest;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.webkit.WebView;
import android.widget.Toast;

public class HRCActivity extends Activity {

	private String tag="wei";
	
	private WebView wv;
	private String web_target;
	private HttpURLConnection hrc;
	private String html;
	
	
	private Handler myHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
	        if(msg.what==0x01){
	        	Log.e(tag, "HRC receive msg"); 
	        	wv.loadDataWithBaseURL("", html, "text/html", "UTF-8", "");
	        	Toast.makeText(HRCActivity.this, "网页加载完毕", Toast.LENGTH_SHORT).show();
	        }
	               
	    }
	};
	    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_hrc);
        Log.e(tag, "HRC onCreate");
        
        wv=(WebView)findViewById(R.id.webView1);
        web_target=new String("http://www.baidu.com");
        
        
        new Thread(){
        	public void run() {
        		 try {
                	 URL url=new URL(web_target);
                	 
                	 hrc=(HttpURLConnection)url.openConnection();	
                	 hrc.setRequestMethod("GET");
                	 hrc.setConnectTimeout(5000);
                	 hrc.setReadTimeout(5000);
    	 
                	 InputStream in=hrc.getInputStream();
                	 
                	 
                	 byte[] buf=new byte[1024];
                	 int len=0;
                	 ByteArrayOutputStream bos=new ByteArrayOutputStream();
                	 while( ( len=in.read(buf) )!=-1){
                		 Log.e("wei", "len is: "+len);
                		 bos.write(buf, 0, len);
                   	 }
                	 in.close();
                	 html = new String(bos.toByteArray(), "UTF-8");

                     Log.e(tag, "HRC send msg"); 
                     myHandler.sendEmptyMessage(0x01);
                	
        		} catch (Exception e) {
        			e.printStackTrace();
        		}finally{
        			hrc.disconnect();
        		}
        		
        	}
        }.start();
    }
 
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}


 
 


你可能感兴趣的:(Android网络编程---HttpURLConnection)