編輯:關於Android編程
Android中網絡請求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用這兩個類庫需要寫大量的代碼才能完成網絡post和get請求,而使用android-async-http這個庫可以大大的簡化操作,它是基於Apache’s HttpClient ,所有的請求都是獨立在UI主線程之外,通過回調方法處理請求結果,采用android Handler message 機制傳遞信息。在 iOS開發中有大名鼎鼎的ASIHttpRequest庫,用來處理網絡請求操作,今天要介紹的是一個在Android上同樣強大的網絡請求庫android-async-http(官方網址:https://loopj.com/android-async-http/),目前非常火的應用Instagram和Pinterest的Android版就是用的這個網絡請求庫。這個網絡請求庫是基於Apache HttpClient庫之上的一個異步網絡請求處理庫,網絡處理均基於Android的非UI線程,通過回調方法處理請求結果。
dependencies { compile 'com.loopj.android:android-async-http:1.4.9' }
AsyncHttpClient asyncHttpClient= new AsyncHttpClient();
private void asyncGetMethod() { asyncHttpClient.get(url, new AsyncHttpResponseHandler() {//接收請求結果,一般重寫onSuccess及onFailure接收請求成功或失敗的消息,還有onStart,onFinish等消息 @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { // called when response HTTP status is "200 OK" if(statusCode==200){ // Log.e("dy",new String(responseBody)); Bitmap bitmap = BitmapFactory.decodeByteArray(responseBody, 0, responseBody.length); imageView.setImageBitmap(bitmap);//回調發生在創建它的線程中 } } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { // called when response HTTP status is "4XX" (eg. 401, 403, 404) } }); }
private void asyncGetMethodWithParams() { params = new RequestParams(); params.put("key","ce3ed11412e24cb9ac909a54ba8fbbd1"); params.put("company","zhongtong"); params.put("id","719235004847"); asyncHttpClient.get(url2,params,new TextHttpResponseHandler() { @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { textView.setText(responseString); } }); }
TextHttpResponseHandler,其繼承自AsyncHttpResponse,並將原生的字節流根據指定的encoding轉化成了string對象。同樣的方式,你可以發送json請求,代碼如下:
private void sendJsonRequest() { params=new RequestParams(); params.put("key","ce3ed11412e24cb9ac909a54ba8fbbd1"); params.put("company","zhongtong"); params.put("id","719235004847"); asyncHttpClient.get(url2,params,new JsonHttpResponseHandler(){ @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { // Handle resulting parsed JSON response here try { Log.e("dy",response.getString("result")); } catch (JSONException e) { e.printStackTrace(); } } }); }
public class MyHttpClient { private static final String BASE_URL="http://api.avatardata.cn"; 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; } }
private void staticHttpClient() { params=new RequestParams(); params.put("key","ce3ed11412e24cb9ac909a54ba8fbbd1"); params.put("company","zhongtong"); params.put("id","719235004847"); MyHttpClient.get(url2,params,new JsonHttpResponseHandler(){ @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { // If the response is JSONObject instead of expected JSONArray try { String error = response.getString("result"); textView.setText(error); } catch (JSONException e) { e.printStackTrace(); } } }); }
上述源碼下載:源碼
調用AsyncHttpClient的get或post等方法發起網絡請求所有的請求都走了sendRequest,在sendRequest中把請求封裝為了AsyncHttpRequest,並添加到線程池執行當請求被執行時(即AsyncHttpRequest的run方法),執行AsyncHttpRequest的makeRequestWithRetries方法執行實際的請求,當請求失敗時可以重試。並在請求開始,結束,成功或失敗時向請求時傳的ResponseHandlerInterface實例發送消息基本上使用的都是AsyncHttpResponseHandler的子類,調用其onStart,onSuccess等方法返回請求結果
一、前言好久沒有更新過博客了,趁今天有空分享一個導航欄的自定義控件。有關此控件的demo相信在網上已經爛大街了,一搜一大把。我現在只著重分享一些我認為比較難理解的知識點。
C中比較難的這一塊,大概就是指針了,所以大家還是多翻閱一下資料,當然,如果只是想了解一下,看本篇也就夠了,不過我也盡量陳述的很詳細一.指針 要說指針,其實通俗易懂的話來
spinner組件有點類型於HTML中的下拉框<Select></select>的樣子,讓用戶每次從下拉框中選取一個,本文為大家分享了Androi
前言:本來我是做電視應用的,但是因為公司要出手機,人員緊張,所以就抽調我去支援一下,誰叫俺是雷鋒呢!我做的一個功能就是處理手機中的應用ICON,處理無非就是美化一下,重新