Android基於HTTP網絡編程總結淺析

</pre>首先,我們都知道現在Android網絡編程只需要利用AfinalHTTP框架很簡單的就可以實現。但是我還是想把Android原生的網絡編程總結一下,畢竟萬變不離其宗。</h3><h3>聲明:本人初學,只是寫出了知其然卻沒有知其所以然(即本人也不是太瞭解具體的實現原理,只是會用。大神們可以繞了。。)</h3><h3>一,前提:注意對網絡的訪問不可以在主線程中(耗時,以免阻塞)可以利用AsyncTask,即異步處理機制。亦或Handler+Thread機制進行線程之間的通信。</h3><h3><span style="font-size:12px">二,其實也可以利嚴苛模式(只需要幾句簡單的代碼),就可以在UI線程進行網絡的訪問了,不過不推薦這種。</span></h3><h3>好了,進入主題。</h3><h3>Android中的網絡編程,我把它分爲兩類,一類是Scoket編程,一類HTTP編程。Scoket編程我是自學,在此不多講。說一下HTTP編程</h3><h3>HTTP是超文本傳輸協議的縮寫,用來傳輸超文本數據。Android提供了HttpURLConnection和HttpClient兩個接口開發訪問程序的接口。</h3><h3><span style="color:#ff0000">1:這種方式通過URL</span></h3><h3><span style="color:#ff0000">HttpURLConnection繼承URLConnection類,兩個都是抽象類,無法背直接實例化。通過URL中的openConnection方法獲得實例</span></h3><div><pre name="code" class="html" style="font-size: 14px; font-weight: bold;">1)創建一個URL對象

URL url = new URL(http://www.baidu.com);  //URL可以爲一個Servlet地址。

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)把輸入流轉化爲字節數組  

byte data[]=take(is) //我寫了一個名字叫take方法,用來把流轉化爲數組,很簡單,略 有空我會來完善的

7)吧數組轉化爲字符串  

String b=new String(data);

此時,b就是服務器端給你傳送的東西。已經完畢,你如果想要傳送對象信息,可以利用Gson解析。

2:這種方式通過HttpClient,值得一提在Android網絡編程中,這種更適合,他有Get 以及Post兩種方法(post可以傳文件到服務器,但是一般情況我用Get)

   Get方式:

 1)HttpClient client=new DefaultHttpClient(); //DefaultHttpClient幫助我們創建一個HttpClient

 2)HttpGet get=new HttpGet(http://www.baidu.com);//你的Servlet地址,你可以帶一些參數過去,比如 "http://www.baidu.com"+username;

 3)HttpResponse response=client.execute(get);

 4) if(response.getStatusLine().getStatusCode(0==200) {  //響應 Ok

 5) HttpEntity entity=response.getEntity; //響應數據的內容

 6)String msg=EntityUtils.toString(entity,"utf-8");

此時,msg就是服務器端給你傳送的東西。已經完畢,你如果想要傳送對象信息,可以利用Gson解析。














發佈了32 篇原創文章 · 獲贊 20 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章