android 判断http编码格式,安卓入门笔记之HttpURLConnection的使用
1.HttpURLConnection連接URL
1)創建一個URL對象
URL url = new URL(http://www.baidu.com);
2)利用HttpURLConnection對象從網絡中獲取網頁數據
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3)設置連接超時
conn.setConnectTimeout(6*1000);
4)對響應碼進行判斷
if (conn.getResponseCode() != 200) ???//從Internet獲取網頁,發送請求,將網頁以流的形式讀回來
throw new RuntimeException("請求url失敗");
5)得到網絡返回的輸入流
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數據沒有介紹完,可以參見我收藏的本站博客作者是wangxigui)
---------以下來自y-z-f的博客園博客Y-Z-F的技術烙印
一、前提準備
在開始實際編碼之前,我們有必要先了解下將會用的類以及方法,進行一個大體的了解。
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()??關閉輸出流,進行操作之后必須使用
上面已經介紹了所有要使用的方法,這里僅僅只是作為快速學習的方式。
二、實際編碼
下面的代碼我們會寫一個工具類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文件中添加訪問網絡的權限:
如果這樣之后網絡連接還是出錯則表示你連接路徑是錯的
如果連接路徑是對的,則可能是你POST的數據格式出現了問題
[很多人在寫HttpURLConnection時都不注意寫AndroidManifest.xml文件的配置,直到報錯了才能知道怎么用,現附代碼如下:]
總結
以上是生活随笔為你收集整理的android 判断http编码格式,安卓入门笔记之HttpURLConnection的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android glide裁剪图片大小,
- 下一篇: html移动端沉浸式状态栏,app沉浸式