Android開發之使用HttpURLConnection進行POST請求


一、前提准備

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

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()  關閉輸出流,進行操作之后必須使用

 

上面已經介紹了所有要使用的方法,這里僅僅只是作為快速學習的方式。

 

二、實際編碼

           下面的代碼我們會寫一個工具類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 }

 

三、問題總結

         在后面的使用中大家可能會出現很多的問題,這里我可以總結下:

  1. 在進行網絡連接前必須擁有對應的權限,所以我們需要在AndroidManifest.xml文件中添加訪問網絡的權限:<uses-permission android:name="android.permission.INTERNET"/>
  2. 如果這樣之后網絡連接還是出錯則表示你連接路徑是錯的
  3. 如果連接路徑是對的,則可能是你POST的數據格式出現了問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM