android 判断http编码格式,安卓入门笔记之HttpURLConnection的使用
1.HttpURLConnection連接URL
1)創(chuàng)建一個(gè)URL對(duì)象
URL url = new URL(http://www.baidu.com);
2)利用HttpURLConnection對(duì)象從網(wǎng)絡(luò)中獲取網(wǎng)頁(yè)數(shù)據(jù)
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3)設(shè)置連接超時(shí)
conn.setConnectTimeout(6*1000);
4)對(duì)響應(yīng)碼進(jìn)行判斷
if (conn.getResponseCode() != 200) ???//從Internet獲取網(wǎng)頁(yè),發(fā)送請(qǐng)求,將網(wǎng)頁(yè)以流的形式讀回來(lái)
throw new RuntimeException("請(qǐng)求url失敗");
5)得到網(wǎng)絡(luò)返回的輸入流
InputStream is = conn.getInputStream();
6)String result = readData(is, "GBK"); //文件流輸入出文件用outStream.write
7)conn.disconnect();
總結(jié):
--記得設(shè)置連接超時(shí),如果網(wǎng)絡(luò)不好,Android系統(tǒng)在超過(guò)默認(rèn)時(shí)間會(huì)收回資源中斷操作.
--返回的響應(yīng)碼200,是成功.
--在Android中對(duì)文件流的操作和JAVA SE上面是一樣的.
--在對(duì)大文件的操作時(shí),要將文件寫(xiě)到SDCard上面,不要直接寫(xiě)到手機(jī)內(nèi)存上.
--操作大文件是,要一遍從網(wǎng)絡(luò)上讀,一遍要往SDCard上面寫(xiě),減少手機(jī)內(nèi)存的使用.這點(diǎn)很重要,面試經(jīng)常會(huì)被問(wèn)到.
--對(duì)文件流操作完,要記得及時(shí)關(guān)閉.
2.向Internet發(fā)送請(qǐng)求參數(shù)
步驟:
1)創(chuàng)建URL對(duì)象:URL realUrl = new URL(requestUrl);
2)通過(guò)HttpURLConnection對(duì)象,向網(wǎng)絡(luò)地址發(fā)送請(qǐng)求
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
3)設(shè)置容許輸出:conn.setDoOutput(true);
4)設(shè)置不使用緩存:conn.setUseCaches(false);
5)設(shè)置使用POST的方式發(fā)送:conn.setRequestMethod("POST");
6)設(shè)置維持長(zhǎng)連接:conn.setRequestProperty("Connection", "Keep-Alive");
7)設(shè)置文件字符集:conn.setRequestProperty("Charset", "UTF-8");
8)設(shè)置文件長(zhǎng)度:conn.setRequestProperty("Content-Length", String.valueOf(data.length));
9)設(shè)置文件類(lèi)型:conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
10)以流的方式輸出.
總結(jié):
--發(fā)送POST請(qǐng)求必須設(shè)置允許輸出
--不要使用緩存,容易出現(xiàn)問(wèn)題.
--在開(kāi)始用HttpURLConnection對(duì)象的setRequestProperty()設(shè)置,就是生成HTML文件頭.
-------------以上來(lái)自小瀨的網(wǎng)易博客longzhanfeng1988的博客
(估計(jì)文章也是轉(zhuǎn)載,沒(méi)有結(jié)束,還有向網(wǎng)絡(luò)發(fā)送xml數(shù)據(jù)沒(méi)有介紹完,可以參見(jiàn)我收藏的本站博客作者是wangxigui)
---------以下來(lái)自y-z-f的博客園博客Y-Z-F的技術(shù)烙印
一、前提準(zhǔn)備
在開(kāi)始實(shí)際編碼之前,我們有必要先了解下將會(huì)用的類(lèi)以及方法,進(jìn)行一個(gè)大體的了解。
URL類(lèi)
這個(gè)類(lèi)主要的功能是定位到要獲取資源的網(wǎng)址以及打開(kāi)連接.
比如下面的代碼:1?URL?realurl?=?new?URL("http:\\xxx.xxx.xxx\xx\xx\xx");2?realurl.openConnection();
HttpURLConnection類(lèi)
該類(lèi)才是我們這節(jié)的主角,連接設(shè)置都需要通過(guò)該類(lèi)。
這里我們需要使用到很多的方法,比如設(shè)置請(qǐng)求方式為POST,為需要發(fā)送過(guò)去的數(shù)據(jù)以及設(shè)置超時(shí)時(shí)間,獲得返回的數(shù)據(jù)。
下面列出了需要使用到的方法:
setDoOutput(Boolean)? 設(shè)置是否可以寫(xiě)入數(shù)據(jù)
setRequestMethod(String)??設(shè)置請(qǐng)求的方式("GET"、"POST")
OutputStream getOutputStream()?獲得輸出流對(duì)象(其實(shí)通過(guò)這個(gè)就可以往這個(gè)請(qǐng)求里面寫(xiě)數(shù)據(jù),這樣網(wǎng)站那就可以獲得數(shù)據(jù)了)
InputStream getInputStream()? ?獲得輸入流對(duì)象(其實(shí)就是最后網(wǎng)站返回過(guò)來(lái)的數(shù)據(jù))
PrintWriter類(lèi)
這個(gè)類(lèi)的出現(xiàn)的原因是getOutputStream得到的OutputStream沒(méi)法直接將字符串寫(xiě)入到輸出流中,必須以char[]數(shù)據(jù)的方式寫(xiě)入,
操作上比較麻煩,所以使用這個(gè)類(lèi),可以很方便的直接將String寫(xiě)入到輸出流中。這里我只使用的寫(xiě)入輸出流、刷新輸出流、關(guān)閉輸出流。
對(duì)應(yīng)的方法如下:
print(String)?用于寫(xiě)入輸出流(就是把數(shù)據(jù)提交給網(wǎng)站)格式必須為(key=value&key1=value1)(ASP.NET 獲取的方式為Request.Form["key"]來(lái)獲取對(duì)應(yīng)的值)
flush()?立即刷新
close()??關(guān)閉輸出流,進(jìn)行操作之后必須使用
上面已經(jīng)介紹了所有要使用的方法,這里僅僅只是作為快速學(xué)習(xí)的方式。
二、實(shí)際編碼
下面的代碼我們會(huì)寫(xiě)一個(gè)工具類(lèi)HttpUtil來(lái)封裝POST請(qǐng)求的方法,以便以后隨時(shí)可以使用。
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?}
三、問(wèn)題總結(jié)
在后面的使用中大家可能會(huì)出現(xiàn)很多的問(wèn)題,這里我可以總結(jié)下:
在進(jìn)行網(wǎng)絡(luò)連接前必須擁有對(duì)應(yīng)的權(quán)限,所以我們需要在AndroidManifest.xml文件中添加訪(fǎng)問(wèn)網(wǎng)絡(luò)的權(quán)限:
如果這樣之后網(wǎng)絡(luò)連接還是出錯(cuò)則表示你連接路徑是錯(cuò)的
如果連接路徑是對(duì)的,則可能是你POST的數(shù)據(jù)格式出現(xiàn)了問(wèn)題
[很多人在寫(xiě)HttpURLConnection時(shí)都不注意寫(xiě)AndroidManifest.xml文件的配置,直到報(bào)錯(cuò)了才能知道怎么用,現(xiàn)附代碼如下:]
總結(jié)
以上是生活随笔為你收集整理的android 判断http编码格式,安卓入门笔记之HttpURLConnection的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android glide裁剪图片大小,
- 下一篇: 魅族用鸿蒙系统吗,魅族宣布接入鸿蒙是怎么