Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Http請求的代碼

Android Http請求的代碼

編輯:關於Android編程

android中可以用兩種方式去實現Http請求,一種是通過HttpURLConnection另外一種是HttpClient,現在來說說這兩個類的用法,以及我常用的一種Http請求的代碼:   HttpURLConnection   繼承關系如下:    java.lang.Object     java.net.URLConnection       java.net.HttpURLConnection 通過官方文檔的描述,我們可以通過URL.openConnection()來得到一個HttpURLConnection的對象,通過這個對象我們可以獲取打開這個URL連接後的數據,用到的方法如getInputStream() 或 getOutputStream()或getHeaderFields() 或setReadTimeout() 或setConnectTimeout()等等等,這裡要非常強調的是,默認情況下,這裡的http請求時get方式,如果要把這個http請求設置成post方式的話,需要setDoOutput(true),當不用這個Http請求對象時,執行disconnect()即可釋放這個請求資源。     HttpClient   它是一個接口,其子類有AbstractHttpClient、AndroidHttpClient、DefaultHttpClient,但是一般來說,我都使用的是HttpClient這個接口,用子類來初始化它。一般是寫一個單例類,因為大家都這麼寫,精通android3一書中也是這麼講解的,如下    
public class MyHttpClient {  
    private static final String CHARSET = HTTP.UTF_8;  
    private static HttpClient mClient ;  
      
    private MyHttpClient(){   
    }  
    public static synchronized HttpClient getInstance(){  
        if(null == mClient){  
            HttpParams params = new BasicHttpParams();  
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);  
            HttpProtocolParams.setContentCharset(params, CHARSET) ;  
            HttpProtocolParams.setUseExpectContinue(params, true);  
            HttpProtocolParams.setUserAgent(params, "Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build.FRG83) "  
                        +"AppleWebKit/553.1(KHTML,like Gecko) Version/4.0 Mobile Safari/533.1");  
            ConnManagerParams.setTimeout(params, 1000);//從連接池中取連接超時的超時時間  
            HttpConnectionParams.setConnectionTimeout(params, 2000);// http連接超時  
            HttpConnectionParams.setSoTimeout(params, 4000);// 請求超時時間  
            SchemeRegistry schReg = new SchemeRegistry();  
            schReg.register(new Scheme("http",SSLSocketFactory.getSocketFactory(),80));  
            schReg.register(new Scheme("https",SSLSocketFactory.getSocketFactory(),443));  
            // 使用線程安全來連接管理創建HttpClient對象  
            ClientConnectionManager conManager = new ThreadSafeClientConnManager(params,schReg);  
              
            mClient = new DefaultHttpClient(conManager,params);  
        }  
        return mClient ;  
    }  
      
    public static synchronized void closeHttpClient() {  
        if(mClient != null) {  
            mClient.getConnectionManager().shutdown();  
            mClient = null;  
        }  
    }  
}  

 

  在用的時候:  
public void connectBaiDu(){  
    HttpClient client = MyHttpClient.getInstance();  
    try {  
        URI uri = new URI("http://www.baidu.com");  
        HttpGet get = new HttpGet(uri);  
        HttpResponse response = client.execute(get);   
        if(null == response){  
            Log.e("", "response is null");  
            return ;  
        }  
              
        int statusCode = response.getStatusLine().getStatusCode() ;  
        if(statusCode != HttpStatus.SC_OK ){  
            return ;  
        }  
        Header[] headers = response.getAllHeaders();  
        for(Header header : headers){  
            Log.e("",header.getName() + "-----" + header.getValue());  
        }  
        InputStream in = response.getEntity().getContent();  
        if(null == in){  
            Log.e("", "in is null");  
            return ;  
        }  
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));  
        String line = "" ;  
        while(null != (line = reader.readLine())){  
            Log.e("line = ",line);  
        }  
    } catch (Exception e) {  
        Log.e("","exception");  
        e.printStackTrace();  
    }finally{  
        MyHttpClient.closeHttpClient();  
    }  
}  

 

  通過單例模式獲取一個實例,並且執行HttpGet對象,可以從官方文檔中看到,execute方法可以執行很多種的http請求,包括HttpGet,HttpPost,HttpHost,HttpUriRequest等等 比較這兩種方式,當一個應用程序需要很多http請求的時候,使用HttpURLConntection時,http設置或賦初值過於分散,修改是件麻煩事,沒有使用HttpClient方便。當然,你的HttpURLConnection也可以寫成單例模式,但是你得傳入一個URL才能初始化它,相對於HttpClient來說的話類的封裝上就差一些,甚至於沒有必要那樣去寫。這裡要看項目有多大,使用http訪問的多不多,多的話,使用HttpClient構成單例類,要好點。使用的少的話,使用HttpURLConnection要好點。      
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved