Android--網絡請求

一、Android 上發送HTTP 請求的方式通常有兩種,HttpURLConnection 和 HttpClient;服務器

二、HttpURLConnection 的用法:網絡

  1)獲取 HttpURLConnection 實例:經過調用 URL 對象的 openConnection() 方法獲取;app

  2)設置 HTTP 請求所使用的方法,經常使用的有兩個方法: GET 和 POST;post

  3)其餘設置,好比設置鏈接超時、讀取超時的毫秒數等;ui

connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);

  4)調用 HttpURLConnection 的 getInputStream() 方法能夠獲取到服務器返回的輸入流,經過這個輸入流就能夠讀取到服務端數據;url

  5)最後須要調用 disconnect() 方法來關閉鏈接。spa

  6)示例代碼:code

private String sendRequestWithHttpURLConnection(){
    String result = null;
    HttpURLConnection connection = null;
    try{
        URL url = new URL("http://www.baidu.com");
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setConnectTimeout(8000);
        connection.setReadTimeout(8000);
        InputStream inputStream = connection.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder sb = new StringBuilder();
        String str;
        while((str = br.readLine()) != null){
            sb.append(str);
        }
        result = sb.toString();
    }catch (Exception e){
        e.printStackTrace();
    }finally{
        if(connection != null){
            connection.disconnect();
        }
    }
    return result;
}

三、HttpClient 的用法:orm

  1)HttpClient 是一個接口,一般狀況下會建立一個 DefaultHttpClient 的實例:HttpClient httpClient = new DefaultHttpClient();對象

  2)設置請求:

    --GET 請求:建立一個 HttpGet 對象,並傳入目標的網絡地址,而後調用 HttpClient 的 execute() 方法便可;

    --POST請求:建立一個 HttpPost 對象,並傳入目標的網絡地址;建立一個 NameValuePair 集合來存放待提交的參數,並將這個參數集合傳入到一個UrlEncodedFormEntity 中,而後調用 HttpPost 的 setEntity() 方法將構建好的 UrlEncodedFormEntity傳入:

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "123456"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
httpPost.setEntity(entity);

  3)調用 HttpClient 的 execute() 方法發起請求;

  4)執行 execute() 方法以後會返回一個 HttpResponse,對象服務器所返回的全部信息就會包含在這裏面,一般狀況先取出服務器返回的狀態碼,若是等於200 就說明請求和響應都成功了,此時能夠調用 getEntity() 方法獲取到一個HttpEntity 實例,而後再用 EntityUtils.toString() 這個靜態方法將 HttpEntity 轉換成字符串;

  5)示例代碼:

private String sendRequestWithHttpClient(String name, String pwd){
    String result = null;
    HttpClient httpClient = null;
    try {
        httpClient = new DefaultHttpClient();
        HttpPost post = new HttpPost("http://www.baidu.com");

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("name", name));
        params.add(new BasicNameValuePair("pwd", pwd));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        post.setEntity(entity);

        HttpResponse response = httpClient.execute(post);
        if(response.getStatusLine().getStatusCode() == 200){
            HttpEntity entity1 = response.getEntity();
            result = EntityUtils.toString(entity1, "UTF-8");
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return result;
}
相關文章
相關標籤/搜索