安卓入門筆記之HttpURLConnection的使用

1.HttpURLConnection鏈接URL
        1)建立一個URL對象android

URL url = new URL(http://www.baidu.com);面試

2)利用HttpURLConnection對象從網絡中獲取網頁數據編程

HttpURLConnection conn = (HttpURLConnection) url.openConnection();緩存

3)設置鏈接超時網絡

conn.setConnectTimeout(6*1000);app

4)對響應碼進行判斷工具

if (conn.getResponseCode() != 200)    //從Internet獲取網頁,發送請求,將網頁以流的形式讀回來學習

throw new RuntimeException("請求url失敗");網站

5)獲得網絡返回的輸入流ui

InputStream is = conn.getInputStream();
6)String result = readData(is, "GBK"); //文件流輸入出文件用outStream.write
7)conn.disconnect();

總結:
--記得設置鏈接超時,若是網絡很差,Android系統在超過默認時間會收回資源中斷操做.
--返回的響應碼200,是成功.
--在Android中對文件流的操做和JAVA SE上面是同樣的.
--在對大文件的操做時,要將文件寫到SDCard上面,不要直接寫到手機內存上.
--操做大文件是,要一遍從網絡上讀,一遍要往SDCard上面寫,減小手機內存的使用.這點很重要,面試常常會被問到.
--對文件流操做完,要記得及時關閉.


2.向Internet發送請求參數
步驟:
1)建立URL對象:URL realUrl = new URL(requestUrl);
2)經過HttpURLConnection對象,向網絡地址發送請求

HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
3)設置允許輸出:conn.setDoOutput(true);
4)設置不使用緩存:conn.setUseCaches(false);
5)設置使用POST的方式發送:conn.setRequestMethod("POST");
6)設置維持長鏈接:conn.setRequestProperty("Connection", "Keep-Alive");
7)設置文件字符集:conn.setRequestProperty("Charset", "UTF-8");
8)設置文件長度:conn.setRequestProperty("Content-Length", String.valueOf(data.length));
9)設置文件類型:conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
10)以流的方式輸出.
總結:
--發送POST請求必須設置容許輸出
--不要使用緩存,容易出現問題.
--在開始用HttpURLConnection對象的setRequestProperty()設置,就是生成HTML文件頭.

-------------以上來自小瀨網易博客longzhanfeng1988的博客

(估計文章也是轉載,沒有結束,還有向網絡發送xml數據沒有介紹完,能夠參見我收藏的本站博客Android 網絡編程之HttpURLConnection做者是wangxigui


---------如下來自y-z-f博客園博客Y-Z-F的技術烙印


1、前提準備

           在開始實際編碼以前,咱們有必要先了解下將會用的類以及方法,進行一個大致的瞭解。

  1. URL類
          這個類主要的功能是定位到要獲取資源的網址以及打開鏈接.
    好比下面的代碼:

    1 URL realurl = new URL("http:\\xxx.xxx.xxx\xx\xx\xx");2 realurl.openConnection();

     

  2. HttpURLConnection類
         該類纔是咱們這節的主角,鏈接設置都須要經過該類。
    這裏咱們須要使用到不少的方法,好比設置請求方式爲POST,爲須要發送過去的數據以及設置超時時間,得到返回的數據。
    下面列出了須要使用到的方法:

    1. setDoOutput(Boolean)   設置是否能夠寫入數據

    2. setRequestMethod(String)  設置請求的方式("GET"、"POST")

    3. OutputStream getOutputStream()  得到輸出流對象(其實經過這個就能夠往這個請求裏面寫數據,這樣網站那就能夠得到數據了)

    4. InputStream getInputStream()    得到輸入流對象(其實就是最後網站返回過來的數據)

  3. PrintWriter類
         這個類的出現的緣由是getOutputStream獲得的OutputStream無法直接將字符串寫入到輸出流中,必須以char[]數據的方式寫入,
    操做上比較麻煩,因此使用這個類,能夠很方便的直接將String寫入到輸出流中。這裏我只使用的寫入輸出流、刷新輸出流、關閉輸出流。
    對應的方法以下:

    1. print(String)  用於寫入輸出流(就是把數據提交給網站)格式必須爲(key=value&key1=value1)(ASP.NET 獲取的方式爲Request.Form["key"]來獲取對應的值)

    2. flush()  當即刷新

    3. close()  關閉輸出流,進行操做以後必須使用

 

   上面已經介紹了全部要使用的方法,這裏僅僅只是做爲快速學習的方式。

 

2、實際編碼

           下面的代碼咱們會寫一個工具類HttpUtil來封裝POST請求的方法,以便之後隨時可使用。

      

複製代碼

 1 final class HttpUtil 
 2 { 
 3      public InputStream sendPost(String url,String params) throw IOException 
 4      { 
 5              URL realurl = null; 
 6              InputStream in = null; 
 7              HttpURLConnection conn = null; 
 8              try{ 
 9                      realurl = new URL(url);
 10                      conn = (HttpURLConnection)realurl.openConnection();
 11                      conn.setDoOutput(true);
 12                      conn.setRequestMethod("POST");
 13                      PrintWriter pw = new PrintWriter(conn.getOutputStream());
 14                      pw.print(params);
 15                      pw.flush();
 16                      pw.close();
 17                      in = conn.getInputStream();
 18              }catch(MalformedURLException eio){
 19                      
 20              }
 21               return in;
 22      }
 23 }

複製代碼

 

3、問題總結

         在後面的使用中你們可能會出現不少的問題,這裏我能夠總結下:

  1. 在進行網絡鏈接前必須擁有對應的權限,因此咱們須要在AndroidManifest.xml文件中添加訪問網絡的權限:<uses-permission android:name="android.permission.INTERNET"/>

  2. 若是這樣以後網絡鏈接仍是出錯則表示你鏈接路徑是錯的

  3. 若是鏈接路徑是對的,則多是你POST的數據格式出現了問題

[不少人在寫HttpURLConnection時都不注意寫AndroidManifest.xml文件的配置,直到報錯了才能知道怎麼用,現附代碼以下:]

< /activity> 
< /application> 
< uses-permission android:name="android.permission.INTERNET"> 
< /uses-permission> 
< /manifest>
相關文章
相關標籤/搜索