Android的HTTP方式網絡通訊---HttpURLConnection

   Android的網絡通訊機制,毫無置疑是用來和網絡打交道的。通訊方式分爲兩種:Http方式和Socket方式。Socket通訊方式和Java中的沒有什麼區別,這個不是咱們今天說的重點。重點的是http通訊方式,咱們來看看她的如山真面目吧。
html

   一:Http通訊方式分類
java

   (1)HttpURLConnection方式
android

   (2)HttpClient方式(這一種咱們明日再敘)
緩存

   二:Http的請求方法
安全

   有兩種方法:post方法和get方法。主要區別以下:
服務器

   相同點:兩者都可以向服務器端傳送數據,而服務器端根據請求返回相應的數據後,關閉鏈接;
網絡

   不一樣點:(1)get方法傳送的數據量小,不能大於2KB,post傳遞的則較大,通常不受限制
app

                (2)post方法傳遞的參數值,不會顯示在URL上,而get傳遞的則會顯示在URL上
jsp

                (3)post安全性較高,get安全性較低ide

   三:HttpURLConnection請求方法--Get

   在操做以前,咱們應該本身搭建一個服務器,而且寫一個服務器端的文件,這裏我寫的文件功能爲,根據傳遞的參數全不爲空的狀況下,輸出字符串的拼接形式。具體文件以下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%
    String a = request.getParameter("a");
    String b = request.getParameter("b");
    if(a!=null&&b!=null){
    out.println(a + b);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    }else {
        out.print("error");
    }
%>

   ◆具體步驟:

   能夠在主界面上添加一個按鈕,在按鈕單擊事件觸發時產生以下操做,說白了,就是把一下的操做放到按鈕的監聽事件中,就OK了。

   (1)定義一個字符串,值爲服務器地址,因爲這裏是get方式進行請求數據,因此參數的傳遞方式爲:URL地址?鍵=值&鍵=值&。。。等,這裏的鍵要和服務器中接收時的鍵相對應。

//服務器的地址,注意這裏的參數傳遞方式,要直接寫在URL後面。形式爲:?鍵=值&鍵=值
                String urlStr = "http://222.27.166.10:8080/MyServer/youcan.jsp?a=Hello&b=word";

   (2)建立URL對象,並將上述服務器地址字符串轉化成URL地址

URL url = new URL(urlStr);//將服務器地址字符串變爲URL形式

   (3)建立HttpURLConnection對象,經過URL對象的openConnection打開網址,注意此時只是打開網址

HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打開網址

   (4)經過HttpURLConnection對象的connect方法進行與服務器的連接,這時才能夠與服務器打交道

conn.connect();// 連接

   (5)經過HttpURLConnection的getInputStream方法得到輸入流,對服務器的返回數據進行讀取操做

in = conn.getInputStream();// 得到輸入流
BufferedReader br = new BufferedReader(
new InputStreamReader(in));//得到輸入流的包裝流
String str = null;//存儲讀取出的一行數據
StringBuffer sb = new StringBuffer();//字符串數據的拼接
    while ((str = br.readLine()) != null) {//作判斷是否是讀完了
    sb.append(str);//若沒讀完,則拼接
                    }
System.out.println(sb.toString());// 輸出的是服務器返回的值

   (6)特別重要的一點:要在Manifest.xml文件中添加訪問網絡的權限,android中全部的關於網絡通訊的操做均須要加上權限。

<uses-permission android:name="android.permission.INTERNET" />

   ◆結果:在後臺輸出了字符串的拼接樣式

01-07 15:55:54.622: INFO/System.out(618): Helloword

   四:HttpURLConnection請求方法--Post

   在這裏咱們一樣使用上述的服務器文件,返回字符串的拼接。

   ◆具體步驟:

   (1)定義一個字符串,值爲服務器地址,因爲這裏是post方式進行請求數據,因此參數不能直接寫在URL後面,注意。

//服務器地址,注意這裏是post傳遞方式不能直接進行傳參
                String urldata = "http://222.27.166.10:8080/MyServer/youcan.jsp";

   (2)建立URL對象,並將上述服務器地址字符串轉化成URL地址

url = new URL(urldata);

   (3)建立HttpURLConnection對象,經過URL對象的openConnection打開網址,注意此時只是打開網址

//打開網址
conn = (HttpURLConnection) url.openConnection();

   (4)設置HttpURLConnection對象的相關屬性,以下

//設置post方式不能緩存數據
conn.setUseCaches(false);
//設置傳參的方式爲post
conn.setRequestMethod("POST");
//設置輸出流
conn.setDoOutput(true);
//設置輸入流
conn.setDoInput(true);

   (5)經過HttpURLConnection對象的connect方法進行與服務器的連接,這時才能夠與服務器打交道

//開始鏈接
conn.connect();

   (6)經過HttpURLConnection對象的getOutputStream方法得到輸出流,將傳遞的參數寫入到其中。

//獲得輸出流,寫參數到Server中
out  =conn.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
//傳遞參數的方式,經過輸出流寫數據的方式URLEncoder.encode的參數爲「鍵對應的值」,"編碼方式"
                    dos.writeBytes("a="+URLEncoder.encode("quanquan", "utf-8"));
DataOutputStream dos1 = new DataOutputStream(out);
//傳遞參數的方式,經過輸出流寫數據的方式URLEncoder.encode的參數爲「鍵對應的值」,"編碼方式"
                    dos1.writeBytes("b="+URLEncoder.encode("quanquan", "utf-8"));

   (7)經過HttpURLConnection對象的getInputStream方法得到輸入流,對服務器的返回數據進行讀取操做

//得到輸入流,獲得返回的數據
in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//進行返回數據的讀取
String line = null;
StringBuffer sb = new StringBuffer();                     
                    while((line=br.readLine())!=null){
sb.append(line);
                    }
System.out.println(sb.toString());

   ◆結果:經過在控制檯輸出結果

01-07 15:55:54.622: INFO/System.out(618): quanquanquanquan

   

   Android通訊方式還有不少,可能這些方式喜歡的人各有不一樣,你們就哪一個用的習慣來哪一個吧,這裏我說的也不是很很全面,敬請諒解哈。

相關文章
相關標籤/搜索