Android网络请求框架四、android-async-http

单于智
2023-12-01

Android Async Http Client一看名字就知道它是基于Http Client的,但是呢在安卓中Http Client已经废弃了,所以也不建议使用这个库了。然后仍然有一些可取的内容值得学习,所以这里也介绍一下。

官网:https://github.com/loopj/android-async-http

特点

  • 所以请求在子线程中完成,请求回调在调用该请求的线程中完成
  • 使用线程池
  • 使用RequestParams类封装请求参数
  • 支持文件上传
  • 持久化cookie到SharedPreferences,个人感觉这一点也是这个库的重要特点,可以很方便的完成一些模拟登录
  • 支持json
  • 支持HTTP Basic Auth

用法

  • 编写一个静态的HttpClient

package cn.edu.zafu.http;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

/**
 * Created by lizhangqu on 2015/5/7.
 */
public class TestClient {
    private static final String BASE_URL = "http://121.41.119.107/";

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

 

  • 调用get或者post方法

参数通过RequestParams传递,没有参数则传递null

RequestParams  params = new RequestParams();
params.put("","");

 

  • 如果要保存cookie,在发起请求之前调用以下代码

PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);

 

之后请求所得到的cookie都会自动持久化

如果要自己添加cookie,则调用以下代码

BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);

 

  • 使用 
    在回调函数中处理返回结果

private void get(){

        TestClient.get("test/index.php", null, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {

}

@Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

}
        });
    }
    private void post(){
        RequestParams params = new RequestParams();
        params.put("user","asas");
        params.put("pass","12121");
        params.put("time","1212121");
        TestClient.post("test/login.php", params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {

}

@Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

}
        });
    }

以上代码参考了Android Asynchronous Http Client官方实例

扩展阅读

android开源框架android-async-http使用
android-async-http框架库使用基础
android-async-http框架库使用入门

http://www.open-open.com/lib/view/open1369637365753.html

 类似资料: