一、前提准備
在開始實際編碼之前,我們有必要先了解下將會用的類以及方法,進行一個大體的了解。
1.URL類
這個類主要的功能是定位到要獲取資源的網址以及打開連接.
比如下面的代碼:
1 URL realurl = new URL("http:\\xxx.xxx.xxx\xx\xx\xx"); 2 realurl.openConnection();
2.HttpURLConnection類
該類才是我們這節的主角,連接設置都需要通過該類。
這里我們需要使用到很多的方法,比如設置請求方式為POST,為需要發送過去的數據以及設置超時時間,獲得返回的數據。
下面列出了需要使用到的方法:
-
- setDoOutput(Boolean) 設置是否可以寫入數據
- setRequestMethod(String) 設置請求的方式("GET"、"POST")
- OutputStream getOutputStream() 獲得輸出流對象(其實通過這個就可以往這個請求里面寫數據,這樣網站那就可以獲得數據了)
- InputStream getInputStream() 獲得輸入流對象(其實就是最后網站返回過來的數據)
3.PrintWriter類
這個類的出現的原因是getOutputStream得到的OutputStream沒法直接將字符串寫入到輸出流中,必須以char[]數據的方式寫入,
操作上比較麻煩,所以使用這個類,可以很方便的直接將String寫入到輸出流中。這里我只使用的寫入輸出流、刷新輸出流、關閉輸出流。
對應的方法如下:
-
- print(String) 用於寫入輸出流(就是把數據提交給網站)格式必須為(key=value&key1=value1)(ASP.NET 獲取的方式為Request.Form["key"]來獲取對應的值)
- flush() 立即刷新
- 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 }
三、問題總結
在后面的使用中大家可能會出現很多的問題,這里我可以總結下:
- 在進行網絡連接前必須擁有對應的權限,所以我們需要在AndroidManifest.xml文件中添加訪問網絡的權限:<uses-permission android:name="android.permission.INTERNET"/>
- 如果這樣之后網絡連接還是出錯則表示你連接路徑是錯的
- 如果連接路徑是對的,則可能是你POST的數據格式出現了問題