android-async-http開源架構的詳細解釋

來源:互聯網
上載者:User

標籤:

Android網路請求庫:android-async-http開源架構
之前有一篇描述了用戶端請求伺服器端的方式—Post的請求方式。今天介紹一個請求伺服器的一個開源庫—android-async-http庫。
1. 概念:
這個網路請求庫是基於Apache HttpClient庫之上的一個非同步網路請求處理庫,網路處理均基於Android的非UI線程,通過回調方法(匿名內部類)處理請求結果。
2. 特徵:
(1).處理非同步Http請求,並通過匿名內部類處理回調結果
**(2).**Http非同步請求均位於非UI線程,不會阻塞UI操作。
(3).通過線程池處理並發請求處理檔案上傳、下載,響應結果自動打包JSON格式。
3. 相應的核心類的介紹:
(1).AsyncHttpResponseHandler:請求返回處理成功、失敗、開始、完成等自訂的訊息的類。
(2).BinaryHttpResponseHandler:AsyncHttpResponseHandler的子類。該類是一個位元組流返回處理的類。用於處理圖片等。
(3).JsonHttpResponseHandler:AsyncHttpResponseHandler的子類。這是一個伺服器與用戶端之間用Json資料交流時使用的類。用戶端請求伺服器的參數是Json資料類型的,伺服器返回給用戶端的資料也是Json資料類型的。
(4).RequestParams:封裝參數處理的類。將用戶端請求的參數封裝在該類中。
(5).AsyncHttpClient:非同步用戶端請求的類。
(6).SyncHttpClient:同步用戶端請求的類。AsyncHttpClient的子類。
注意:HttpUtil這個類主要列出了我們常用的get方法,在要使用的地方,調用該類就行了。需要添加android-async-http-1.4.7.jar檔案包。
代碼如下:

(1).AsyncJsonUtilGet.java

package com.chengdong.su.util.get;import org.apache.http.Header;import org.json.JSONException;import org.json.JSONObject;import android.content.Context;import android.widget.Toast;import com.loopj.android.http.JsonHttpResponseHandler;import com.loopj.android.http.RequestParams;/** * 非同步請求伺服器 *  * @author scd *  */public class AsyncJsonUtilGet {    private static final String URL = "";    private Context mContext;    /**     * 構造方法     *      * @param mContext     */    public AsyncJsonUtilGet(Context mContext) {        super();        this.mContext = mContext;    }    /**     * 郵箱註冊     */    public void emailRegister(String email, String password, String username) {        RequestParams params = new RequestParams();        JSONObject jsonObject = new JSONObject();        try {            jsonObject.put("email", email);            jsonObject.put("password", password);            jsonObject.put("username", username);        } catch (JSONException e) {            e.printStackTrace();        }        params.put("jsonObject", jsonObject);        // get請求方式        HttpUtil.get(URL, params, new JsonHttpResponseHandler() {            @Override            public void onFailure(int statusCode, Header[] headers,                    Throwable throwable, JSONObject errorResponse) {                super.onFailure(statusCode, headers, throwable, errorResponse);                Toast.makeText(mContext, "Register failed!", Toast.LENGTH_SHORT)                        .show();            }            @Override            public void onSuccess(int statusCode, Header[] headers,                    JSONObject response) {                String errorCode = response.optString("ErrorCode");                // 表示請求成功                if (errorCode.equals("0")) {                    Toast.makeText(mContext, "註冊成功", Toast.LENGTH_LONG).show();                    // response:返回的資料都在這個參數中,根據業務要求進行實現功能                } else {                    super.onSuccess(statusCode, headers, response);                }            }        });    }}

(2).HttpUtil.java工具類:註:需要添加jar包

package com.chengdong.su.util.get;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.util.List;import java.util.Map;import java.util.Set;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import com.loopj.android.http.BinaryHttpResponseHandler;import com.loopj.android.http.JsonHttpResponseHandler;import com.loopj.android.http.RequestParams;public class HttpUtil {    public static final String STATUS_NETWORK = "network_available";    private static AsyncHttpClient client = new AsyncHttpClient();    static {        client.setTimeout(11000);    }    public static void get(String urlString, AsyncHttpResponseHandler res) {        client.get(urlString, res);    }    public static void get(String urlString, RequestParams params,            AsyncHttpResponseHandler res) {        client.get(urlString, params, res);    }    public static void get(String urlString, JsonHttpResponseHandler res)    {        client.get(urlString, res);    }    public static void get(String urlString, RequestParams params,            JsonHttpResponseHandler res)    {        client.get(urlString, params, res);    }    public static void get(String uString, BinaryHttpResponseHandler bHandler)    {        client.get(uString, bHandler);    }    public static AsyncHttpClient getClient() {        return client;    }    public static boolean isNetworkConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager                    .getActiveNetworkInfo();            if (mNetworkInfo != null) {                return mNetworkInfo.isAvailable();            }        }        return false;    }    // 從UrlConnection中擷取檔案名稱    public static String getFileName(String url) {        String fileName = null;        boolean isOK = false;        try {            URL myURL = new URL(url);            URLConnection conn = myURL.openConnection();            if (conn == null) {                return null;            }            Map<String, List<String>> hf = conn.getHeaderFields();            if (hf == null) {                return null;            }            Set<String> key = hf.keySet();            if (key == null) {                return null;            }            for (String skey : key) {                List<String> values = hf.get(skey);                for (String value : values) {                    String result;                    try {                        result = value;                        int location = result.indexOf("filename");                        if (location >= 0) {                            result = result.substring(location                                    + "filename".length());                            result = java.net.URLDecoder                                    .decode(result, "utf-8");                            result = result.substring(result.indexOf("\"") + 1,                                    result.lastIndexOf("\""));                            fileName = result                                    .substring(result.indexOf("=") + 1);                            isOK = true;                        }                    } catch (UnsupportedEncodingException e) {                        e.printStackTrace();                    }                }                if (isOK) {                    break;                }            }        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return fileName;    }}

android-async-http開源架構的詳細解釋

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.