1. 程式人生 > >Android中的網路程式設計

Android中的網路程式設計


AsyncHttpClient特性:
(1)採用非同步http請求,並通過匿名內部類處理回撥結果
(2)http請求獨立在UI主執行緒之外
(3)採用執行緒池來處理併發請求
(4)採用RequestParams類建立GET/POST引數
(5)不需要第三方包即可支援Multipart file檔案上傳
(6)大小隻有25kb
(7)自動為各種行動電話處理連線斷開時請求重連
(8)超快的自動gzip響應解碼支援
(9)使用BinaryHttpResponseHandler類下載二進位制檔案(如圖片)
(10) 使用JsonHttpResponseHandler類可以自動將響應結果解析為json格式
(11)持久化cookie儲存,可以將cookie儲存到你的應用程式的SharedPreferences中

使用方法

(1)到官網http://loopj.com/android-async-http/下載最新的android-async-http-1.4.4.jar,然後將此jar包新增進Android應用程式 libs資料夾
(2)通過import com.loopj.android.http.*;引入相關類
(3)建立非同步請求

[java] view plaincopy
  1. AsyncHttpClient client = new AsyncHttpClient();  
  2. client.get("http://www.google.com"new AsyncHttpResponseHandler() {  
  3.     @Override
  4.     publicvoid onSuccess(String response) {  
  5.         System.out.println(response);  
  6.     }  
  7. });  

建議使用靜態的Http Client物件
在下面這個例子,我們建立了靜態的http client物件,使其很容易連線到Twitter的API
[java] view plaincopy
  1. import com.loopj.android.http.*;  
  2. publicclass TwitterRestClient {  
  3.   privatestaticfinal String BASE_URL = "http://api.twitter.com/1/";  
  4.   privatestatic AsyncHttpClient client = new AsyncHttpClient();  
  5.   publicstaticvoid get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {  
  6.       client.get(getAbsoluteUrl(url), params, responseHandler);  
  7.   }  
  8.   publicstaticvoid post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {  
  9.       client.post(getAbsoluteUrl(url), params, responseHandler);  
  10.   }  
  11.   privatestatic String getAbsoluteUrl(String relativeUrl) {  
  12.       return BASE_URL + relativeUrl;  
  13.   }  
  14. }  
然後我們可以很容易的在程式碼中操作Twitter的API
[java] view plaincopy
  1. import org.json.*;  
  2. import com.loopj.android.http.*;  
  3. class TwitterRestClientUsage {  
  4.     publicvoid getPublicTimeline() throws JSONException {  
  5.         TwitterRestClient.get("statuses/public_timeline.json"nullnew JsonHttpResponseHandler() {  
  6.             @Override
  7.             publicvoid onSuccess(JSONArray timeline) {  
  8.                 // Pull out the first event on the public timeline
  9.                 JSONObject firstEvent = timeline.get(0);  
  10.                 String tweetText = firstEvent.getString("text");  
  11.                 // Do something with the response
  12.                 System.out.println(tweetText);  
  13.             }  
  14.         });  
  15.     }  
  16. }  

AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三個類使用方法

(1)AsyncHttpClient

public class AsyncHttpClient extends java.lang.Object
 該類通常用在android應用程式中建立非同步GET, POST, PUT和DELETE HTTP請求,請求引數通過RequestParams例項建立,響應通過重寫匿名內部類 ResponseHandlerInterface的方法處理。
例子:
[java] view plaincopy
  1. AsyncHttpClient client = new AsyncHttpClient();  
  2.  client.get("http://www.google.com"new ResponseHandlerInterface() {  
  3.      @Override
  4.      publicvoid onSuccess(String response) {  
  5.          System.out.println(response);  
  6.      }  
  7.  });  
(2)RequestParams
public class RequestParams extends java.lang.Object 
用於建立AsyncHttpClient例項中的請求引數(包括字串或者檔案)的集合
例子:
[java] view plaincopy
  1. RequestParams params = new RequestParams();  
  2.  params.put("username""james");  
  3.  params.put("password""123456");  
  4.  params.put("email""[email protected]");  
  5.  params.put("profile_picture"new File("pic.jpg")); // Upload a File
  6.  params.put("profile_picture2", someInputStream); // Upload an InputStream
  7.  params.put("profile_picture3"new ByteArrayInputStream(someBytes)); // Upload some bytes
  8.  Map<String, String> map = new HashMap<String, String>();  
  9.  map.put("first_name""James");  
  10.  map.put("last_name""Smith");  
  11.  params.put("user", map); // url params: "user[first_name]=James&user[last_name]=Smith"
  12.  Set<String> set = new HashSet<String>(); // unordered collection
  13.  set.add("music");  
  14.  set.add("art");  
  15.  params.put("like", set); // url params: "like=music&like=art"
  16.  List<String> list = new ArrayList<String>(); // Ordered collection
  17.  list.add("Java");  
  18.  list.add("C");  
  19.  params.put("languages", list); // url params: "languages[]=Java&languages[]=C"
  20.  String[] colors = { "blue""yellow" }; // Ordered collection
  21.  params.put("colors", colors); // url params: "colors[]=blue&colors[]=yellow"
  22.  List<Map<String, String>> listOfMaps = new ArrayList<Map<String, String>>();  
  23.  Map<String, String> user1 = new HashMap<String, String>();  
  24.  user1.put("age""30");  
  25.  user1.put("gender""male");  
  26.  Map<String, String> user2 = new HashMap<String, String>();  
  27.  user2.put("age""25");  
  28.  user2.put("gender""female");  
  29.  listOfMaps.add(user1);  
  30.  listOfMaps.add(user2);  
  31.  params.put("users", listOfMaps); // url params: "users[][age]=30&users[][gender]=male&users[][age]=25&users[][gender]=female"
  32.  AsyncHttpClient client = new AsyncHttpClient();  
  33.  client.post("http://myendpoint.com", params, responseHandler);  
(3)public class AsyncHttpResponseHandler extends java.lang.Object implements ResponseHandlerInterface
用於攔截和處理由AsyncHttpClient建立的請求。在匿名類AsyncHttpResponseHandler中的重寫 onSuccess(int, org.apache.http.Header[], byte[])方法用於處理響應成功的請求。此外,你也可以重寫 onFailure(int, org.apache.http.Header[], byte[], Throwable), onStart(), onFinish(), onRetry() 和onProgress(int, int)方法
例子:
[java] view plaincopy
  1. AsyncHttpClient client = new AsyncHttpClient();  
  2.  client.get("http://www.google.com"new AsyncHttpResponseHandler() {  
  3.      @Override
  4.      publicvoid onStart() {  
  5.          // Initiated the request
  6.      }  
  7.      @Override
  8.      publicvoid onSuccess(int statusCode, Header[] headers, byte[] responseBody) {  
  9. 相關推薦

    python網路程式設計基礎

    一:什麼是c\s架構 1.c\s即client\server 客戶端\服務端架構. 客戶端因特定的請求而聯絡伺服器併發送必要的資料等待伺服器的迴應最後完成請求 服務端:存在的意義就是等待客戶端的請求,伺服器無限的執行下去,並不斷的處理請求 2.硬體客戶端\伺服器架構也是c\S架構 客戶端\印表機,客

    Qt網路程式設計(C/S架構)Tcp

    A. 伺服器: 1) 建立伺服器物件:QTcpServer server; 2) 繫結+監聽:server中的listen方法 引數(QHostAddress::Any,埠號一般為1024-65535); 3) 當有客戶端連線上伺服器時,會觸發訊號readyRead(),可以利用connec

    python網路程式設計之執行緒

    網路程式設計之執行緒 什麼是執行緒? 程式的執行線路。每個程序預設有一條執行緒。執行緒包含了程式的具體步驟。 多執行緒就是一個程序中有除主執行緒(預設執行緒)外還有多個執行緒。 執行緒與程序的關係(程序包含執行緒,而執行緒依賴程序存在) 1.程序包含了執行該程式的所有資源,是一個資源單位。

    python網路程式設計的黏包現象

    黏包中的關鍵因素 : 緩衝區 緩衝區 :  將程式和網路解耦 緩衝區大致有輸入緩衝區 和 輸出緩衝區兩種形式,這也是產生黏包的因素.大致的緩衝情況 如下圖所示:     每個 socket 被建立後,都會分配兩個緩衝區,輸入緩

    python網路程式設計總結(udp,tcp)

    一、udp使用者資料報協議(寫信的模型:在通訊開始,不需要建立相關的連線,只需要傳送資料即可,類似於生活中的寫信)(不安全:發的訊息可能會丟,對方不會請求再發一遍) 1.ipv4:_ _ _ ._ _ _ . _ _ _ ._ _ _ 192.168.1.1 注:192.168 是代表的同一

    python3網路程式設計的編碼問題

    在學習python3網路程式設計的時候,總是出現“a bytes-like object is required,not ‘str’ ”這種提示,很苦惱,網上也百度了一波,可是還是沒有得到解決,便看了看有關編碼的知識,可是看了之後還是報同樣的問題,感覺應該是se

    Linux網路程式設計常用函式

    1.位元組序轉換  CPU 向記憶體儲存資料以及解析資料的方式有兩種:    1)大端位元組序(Big Endian): 高位位元組存放在低位地址上    2)  小端位元組序(Little Endian): 高位位元組存放在高位地址上 因為這種差異性,異導致資料解析的混亂

    android網路請求url地址部分的寫法

    新版介面的一些感受 寫部落格的介面又變化了,感覺更加的舒服了。不像原來介面那樣單一了,在一個介面上就能填寫關於文章的好多資訊,感覺體驗有了一點提高。不錯,表揚一下! 背景 專案不可避免會用到網路這一塊的東西,然後需要根據介面地址來獲取資料。那

    Android 網路框架Volley的用法

    Volley是在Google I/O 2013上釋出的一框網路通訊http模組,新版本的Android已經廢除了HttpClient的使用,目前主流的android網路通訊庫有:Async-Http、NoHttp、xUtil等。本文就自己學習了Volley一些相

    Android網路程式設計框架選析

    關於網路操作一般都會介紹HttpClient以及HttpConnection這兩個包。前者是apache的開源庫,後者是android自帶的api。既然提到了他們,對二者進行一個比較,谷歌在官方文件

    android網路請求頁面關閉了會怎麼樣

    這是我在面試的時候,別人問的,其實 ,在實際開發中,並沒有怎麼遇到: 如果activity中開啟了一個網路請求,正在請求中的時候,activity關閉了,那網路請求會怎麼樣? 因為之前沒有遇到過這個問題,我當時想的是,網路請求是非同步的,應該還會繼續,資料返回以後,比如要往

    AndroidJNI程式設計的那些事兒 【轉】

    後續可能為需要加入一些特定的模組到android中,所以JNI還需繼續熟悉起來 首先說明,Android系統不允許一個純粹使用C/C++的程式出現,它要求必須是通過Java程式碼嵌入Native C/C++——即通過JNI的方式來使用本地(Native)程式碼。因此

    Android網路流量控制(防火牆)——Iptables

    Iptables簡介iptables是與最新的 2.6.x 版本 Linux 核心整合的 IP 資訊包過濾系統。如果 Linux 系統連線到因特網或 LAN、伺服器或連線 LAN 和因特網的代理伺服器, 則該系統有利於在 Linux 系統上更好地控制 IP 資訊包過濾

    AndroidNFC程式設計

    Android NFC的相關資源,需求和設定 你可以在Android的NFC支援頁面找到相關的API文件和NFC的示例程式碼: 接下來該怎麼做呢?通常需要硬體的支援(手機支援NFC)和新增你的應用的許可權。 這需要你修改你的AndroidManifest.xml檔案,將

    Android網路程式設計的URLConnection的IP設定

    虛擬機器測試:10.0.0.2 PC連線乙太網:通過cmd命令,進入命令視窗。輸入ipconfig檢視乙太網介面卡ipv4地址 Android測試機連入本機WiFi網路:如圖 如果Android上提示 java.net.SocketTimeoutEx

    Android網路程式設計關於AsyncHttpClient獲取cookie的問題

    之前的專案登入模組存在問題,登入狀態和使用者名稱直接存在了SharedPreferences裡,進入軟體時直接判斷使用者名稱是否為空,為空時才進入登入頁面,否則直接讀取SP中的相關資料,看了AsyncHttpClient的文件後,才發現可以允許讀取cookie。

    android網路程式設計使用java的回撥機制

    1) 先定義一個介面 public interface HttpCallbackListener { void onFinish(String response); void onError(Exception e); } 2) 在工具類HttpUtil中

    Android網路程式設計-黃俊東-專題視訊課程

    Android中的網路程式設計—1902人已學習 課程介紹        剔除繁雜的理論,注重實踐,深入淺出講解Android中的網路程式設計課程收益    每一個學員都能系統地掌握Android中的網

    Android網路程式設計

    AsyncHttpClient特性: (1)採用非同步http請求,並通過匿名內部類處理回撥結果 (2)http請求獨立在UI主執行緒之外 (3)採用執行緒池來處理併發請求 (4)採用RequestParams類建立GET/POST引數 (5)不需要第三方包即可支援Multipart fil

    Java/Android網路程式設計--(上)

    網路是20世紀最偉大的發明之一,眾多的裝置可以以有線或者無線的方式連入整個網際網路,進而互相通訊。為了更好的開發、管理、接入網路,科學家設計了通訊協議,將整個網路架構分為7層(4層),並規範了每一層的功能。 網路分層 早期的OSI參考模型將網路分為7層:應用層、表示層、會