首页 > 系统 > Android > 正文

Android网络请求库android-async-http介绍

2020-04-11 11:31:59
字体:
来源:转载
供稿:网友

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;  }}

开源之家介绍:http://open.VeVB.COm/project/app-framework/android-async-http.html

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表