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、前提準備
在開始實際編碼以前,咱們有必要先了解下將會用的類以及方法,進行一個大致的瞭解。
URL類
這個類主要的功能是定位到要獲取資源的網址以及打開鏈接.
好比下面的代碼:
1 URL realurl = new URL("http:\\xxx.xxx.xxx\xx\xx\xx");2 realurl.openConnection();
HttpURLConnection類
該類纔是咱們這節的主角,鏈接設置都須要經過該類。
這裏咱們須要使用到不少的方法,好比設置請求方式爲POST,爲須要發送過去的數據以及設置超時時間,得到返回的數據。
下面列出了須要使用到的方法:
setDoOutput(Boolean) 設置是否能夠寫入數據
setRequestMethod(String) 設置請求的方式("GET"、"POST")
OutputStream getOutputStream() 得到輸出流對象(其實經過這個就能夠往這個請求裏面寫數據,這樣網站那就能夠得到數據了)
InputStream getInputStream() 得到輸入流對象(其實就是最後網站返回過來的數據)
PrintWriter類
這個類的出現的緣由是getOutputStream獲得的OutputStream無法直接將字符串寫入到輸出流中,必須以char[]數據的方式寫入,
操做上比較麻煩,因此使用這個類,能夠很方便的直接將String寫入到輸出流中。這裏我只使用的寫入輸出流、刷新輸出流、關閉輸出流。
對應的方法以下:
print(String) 用於寫入輸出流(就是把數據提交給網站)格式必須爲(key=value&key1=value1)(ASP.NET 獲取的方式爲Request.Form["key"]來獲取對應的值)
flush() 當即刷新
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、問題總結
在後面的使用中你們可能會出現不少的問題,這裏我能夠總結下:
在進行網絡鏈接前必須擁有對應的權限,因此咱們須要在AndroidManifest.xml文件中添加訪問網絡的權限:<uses-permission android:name="android.permission.INTERNET"/>
若是這樣以後網絡鏈接仍是出錯則表示你鏈接路徑是錯的
若是鏈接路徑是對的,則多是你POST的數據格式出現了問題
[不少人在寫HttpURLConnection時都不注意寫AndroidManifest.xml文件的配置,直到報錯了才能知道怎麼用,現附代碼以下:]
< /activity> < /application> < uses-permission android:name="android.permission.INTERNET"> < /uses-permission> < /manifest>