日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Asynchronous Http Client-Android异步网络请求客户端接口

發布時間:2023/12/15 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Asynchronous Http Client-Android异步网络请求客户端接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.簡介
Android中網絡請求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用這兩個類庫需要寫大量的代碼才能完成網絡post和get請求,而使用android-async-http這個庫可以大大的簡化操作,它是基于Apache’s HttpClient ,所有的請求都是獨立在UI主線程之外,通過回調方法處理請求結果,采用android ?Handler?message 機制傳遞信息。

2.特性
(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中

3.使用方法
(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
  • AsyncHttpClient?client?=?new?AsyncHttpClient();??
  • client.get("http://www.google.com",?new?AsyncHttpResponseHandler()?{??
  • ????@Override??
  • ????public?void?onSuccess(String?response)?{??
  • ????????System.out.println(response);??
  • ????}??
  • });??

  • 4.建議使用靜態的Http Client對象
    在下面這個例子,我們創建了靜態的http client對象,使其很容易連接到Twitter的API
    [java] view plaincopy
  • import?com.loopj.android.http.*;??
  • ??
  • public?class?TwitterRestClient?{??
  • ??private?static?final?String?BASE_URL?=?"http://api.twitter.com/1/";??
  • ??
  • ??private?static?AsyncHttpClient?client?=?new?AsyncHttpClient();??
  • ??
  • ??public?static?void?get(String?url,?RequestParams?params,?AsyncHttpResponseHandler?responseHandler)?{??
  • ??????client.get(getAbsoluteUrl(url),?params,?responseHandler);??
  • ??}??
  • ??
  • ??public?static?void?post(String?url,?RequestParams?params,?AsyncHttpResponseHandler?responseHandler)?{??
  • ??????client.post(getAbsoluteUrl(url),?params,?responseHandler);??
  • ??}??
  • ??
  • ??private?static?String?getAbsoluteUrl(String?relativeUrl)?{??
  • ??????return?BASE_URL?+?relativeUrl;??
  • ??}??
  • }??
  • 然后我們可以很容易的在代碼中操作Twitter的API
    [java] view plaincopy
  • import?org.json.*;??
  • import?com.loopj.android.http.*;??
  • ??
  • class?TwitterRestClientUsage?{??
  • ????public?void?getPublicTimeline()?throws?JSONException?{??
  • ????????TwitterRestClient.get("statuses/public_timeline.json",?null,?new?JsonHttpResponseHandler()?{??
  • ????????????@Override??
  • ????????????public?void?onSuccess(JSONArray?timeline)?{??
  • ????????????????//?Pull?out?the?first?event?on?the?public?timeline??
  • ????????????????JSONObject?firstEvent?=?timeline.get(0);??
  • ????????????????String?tweetText?=?firstEvent.getString("text");??
  • ??
  • ????????????????//?Do?something?with?the?response??
  • ????????????????System.out.println(tweetText);??
  • ????????????}??
  • ????????});??
  • ????}??
  • }??

  • 5. AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三個類使用方法

    (1)AsyncHttpClient

    public class AsyncHttpClient extends java.lang.Object
    ?該類通常用在android應用程序中創建異步GET, POST, PUT和DELETE HTTP請求,請求參數通過RequestParams實例創建,響應通過重寫匿名內部類 ResponseHandlerInterface的方法處理。
    例子:
    [java] view plaincopy
  • AsyncHttpClient?client?=?new?AsyncHttpClient();??
  • ?client.get("http://www.google.com",?new?ResponseHandlerInterface()?{??
  • ?????@Override??
  • ?????public?void?onSuccess(String?response)?{??
  • ?????????System.out.println(response);??
  • ?????}??
  • ?});??
  • (2)RequestParams
    public class RequestParams extends java.lang.Object?
    用于創建AsyncHttpClient實例中的請求參數(包括字符串或者文件)的集合
    例子:
    [java] view plaincopy
  • RequestParams?params?=?new?RequestParams();??
  • ?params.put("username",?"james");??
  • ?params.put("password",?"123456");??
  • ?params.put("email",?"my@email.com");??
  • ?params.put("profile_picture",?new?File("pic.jpg"));?//?Upload?a?File??
  • ?params.put("profile_picture2",?someInputStream);?//?Upload?an?InputStream??
  • ?params.put("profile_picture3",?new?ByteArrayInputStream(someBytes));?//?Upload?some?bytes??
  • ??
  • ?Map<String,?String>?map?=?new?HashMap<String,?String>();??
  • ?map.put("first_name",?"James");??
  • ?map.put("last_name",?"Smith");??
  • ?params.put("user",?map);?//?url?params:?"user[first_name]=James&user[last_name]=Smith"??
  • ??
  • ?Set<String>?set?=?new?HashSet<String>();?//?unordered?collection??
  • ?set.add("music");??
  • ?set.add("art");??
  • ?params.put("like",?set);?//?url?params:?"like=music&like=art"??
  • ??
  • ?List<String>?list?=?new?ArrayList<String>();?//?Ordered?collection??
  • ?list.add("Java");??
  • ?list.add("C");??
  • ?params.put("languages",?list);?//?url?params:?"languages[]=Java&languages[]=C"??
  • ??
  • ?String[]?colors?=?{?"blue",?"yellow"?};?//?Ordered?collection??
  • ?params.put("colors",?colors);?//?url?params:?"colors[]=blue&colors[]=yellow"??
  • ??
  • ?List<Map<String,?String>>?listOfMaps?=?new?ArrayList<Map<String,?String>>();??
  • ?Map<String,?String>?user1?=?new?HashMap<String,?String>();??
  • ?user1.put("age",?"30");??
  • ?user1.put("gender",?"male");??
  • ?Map<String,?String>?user2?=?new?HashMap<String,?String>();??
  • ?user2.put("age",?"25");??
  • ?user2.put("gender",?"female");??
  • ?listOfMaps.add(user1);??
  • ?listOfMaps.add(user2);??
  • ?params.put("users",?listOfMaps);?//?url?params:?"users[][age]=30&users[][gender]=male&users[][age]=25&users[][gender]=female"??
  • ??
  • ?AsyncHttpClient?client?=?new?AsyncHttpClient();??
  • ?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
  • AsyncHttpClient?client?=?new?AsyncHttpClient();??
  • ?client.get("http://www.google.com",?new?AsyncHttpResponseHandler()?{??
  • ?????@Override??
  • ?????public?void?onStart()?{??
  • ?????????//?Initiated?the?request??
  • ?????}??
  • ??
  • ?????@Override??
  • ?????public?void?onSuccess(int?statusCode,?Header[]?headers,?byte[]?responseBody)?{??
  • ?????????//?Successfully?got?a?response??
  • ?????}??
  • ??
  • ?????@Override??
  • ?????public?void?onFailure(int?statusCode,?Header[]?headers,?byte[]?responseBody,?Throwable?error)??
  • ?{??
  • ?????????//?Response?failed?:(??
  • ?????}??
  • ??
  • ?????@Override??
  • ?????public?void?onRetry()?{??
  • ?????????//?Request?was?retried??
  • ?????}??
  • ??
  • ?????@Override??
  • ?????public?void?onProgress(int?bytesWritten,?int?totalSize)?{??
  • ?????????//?Progress?notification??
  • ?????}??
  • ??
  • ?????@Override??
  • ?????public?void?onFinish()?{??
  • ?????????//?Completed?the?request?(either?success?or?failure)??
  • ?????}??
  • ?});??

  • 6.利用PersistentCookieStore持久化存儲cookie
    PersistentCookieStore類用于實現Apache HttpClient的CookieStore接口,可以自動的將cookie保存到Android設備的SharedPreferences中,如果你打算使用cookie來管理驗證會話,這個非常有用,因為用戶可以保持登錄狀態,不管關閉還是重新打開你的app
    (1)首先創建 AsyncHttpClient實例對象
    [java] view plaincopy
  • AsyncHttpClient?myClient?=?new?AsyncHttpClient();??
  • (2)將客戶端的cookie保存到PersistentCookieStore實例對象,帶有activity或者應用程序context的構造方法
    [java] view plaincopy
  • PersistentCookieStore?myCookieStore?=?new?PersistentCookieStore(this);??
  • myClient.setCookieStore(myCookieStore);??
  • (3)任何從服務器端獲取的cookie都會持久化存儲到myCookieStore中,添加一個cookie到存儲中,只需要構造一個新的cookie對象,并且調用addCookie方法
    [java] view plaincopy
  • BasicClientCookie?newCookie?=?new?BasicClientCookie("cookiesare",?"awesome");??
  • newCookie.setVersion(1);??
  • newCookie.setDomain("mydomain.com");??
  • newCookie.setPath("/");??
  • myCookieStore.addCookie(newCookie);??

  • 7.利用RequestParams上傳文件
    類RequestParams支持multipart file 文件上傳
    (1)在RequestParams 對象中添加InputStream用于上傳
    [java] view plaincopy
  • InputStream?myInputStream?=?blah;??
  • RequestParams?params?=?new?RequestParams();??
  • params.put("secret_passwords",?myInputStream,?"passwords.txt");??
  • (2)添加文件對象用于上傳
    [java] view plaincopy
  • File?myFile?=?new?File("/path/to/file.png");??
  • RequestParams?params?=?new?RequestParams();??
  • try?{??
  • ????params.put("profile_picture",?myFile);??
  • }?catch(FileNotFoundException?e)?{}??
  • (3)添加字節數組用于上傳
    [java] view plaincopy
  • byte[]?myByteArray?=?blah;??
  • RequestParams?params?=?new?RequestParams();??
  • params.put("soundtrack",?new?ByteArrayInputStream(myByteArray),?"she-wolf.mp3");??

  • 8.用BinaryHttpResponseHandler下載二進制數據
    [java] view plaincopy
  • BinaryHttpResponseHandler用于獲取二進制數據如圖片和其他文件??
  • AsyncHttpClient?client?=?new?AsyncHttpClient();??
  • String[]?allowedContentTypes?=?new?String[]?{?"image/png",?"image/jpeg"?};??
  • client.get("http://example.com/file.png",?new?BinaryHttpResponseHandler(allowedContentTypes)?{??
  • ????@Override??
  • ????public?void?onSuccess(byte[]?fileData)?{??
  • ????????//?Do?something?with?the?file??
  • ????}??
  • });??

  • 參考資料:http://loopj.com/android-async-http/

    總結

    以上是生活随笔為你收集整理的Android Asynchronous Http Client-Android异步网络请求客户端接口的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。