如何添加android-async-http源码

2025-04-13 05:32:24
推荐回答(2个)
回答1:

  简单来说你只需要3步,

  1. 创建一个AsyncHttpClient;

  2. (可选的)通过RequestParams对象设置请求参数;

  3. 调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类

  ,实现了AsyncHttpResponseHandler,类库自己也提供了好些现成的response
handler,你一般不需要自己创建一个。

  来看看代码如何写:

  AsyncHttpClient client = new AsyncHttpClient();

  client.get("http://www.google.com", new AsyncHttpResponseHandler() {

  @Override

  public void onStart() {

  // called before request is started

  }

  @Override

  public void onSuccess(int statusCode, Header[] headers, byte[] response)
{

  // called when response HTTP status is "200 OK"

  }

  @Override

  public void onFailure(int statusCode, Header[] headers, byte[]
errorResponse, Throwable e) {

  // called when response HTTP status is "4XX" (eg. 401, 403, 404)

  }

  @Override

  public void onRetry(int retryNo) {

  // called when request is retried

  }

  });

  是不是很简洁,有没有被震撼到?反正我自己第一次看到的时候有种相见恨晚的感觉,这简直就是我日思夜想的方式啊!这里你只需要通过

  匿名内部类的方式实现AsyncHttpResponseHandler,而且更棒的是你只需要override感兴趣的方法,比如一般都是onSuccess和onFailure。

  这个版本的get方法没有为请求传递任何参数,当然你也可以通过RequestParams来传递各种参数,如下:

  AsyncHttpClient client = new AsyncHttpClient();

  RequestParams params = new RequestParams();

  params.put("key", "value");

  params.put("more", "data");

  client.get("http://www.google.com", params, new

  AsyncHttpResponseHandler() {

  @Override

  public void onSuccess(int statusCode, Header[] headers, byte[] response)
{

  System.out.println(response);

  }

  @Override

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

  Log.d("ERROR", error);

  }

  }

  );

  以上的例子是返回的response直接是原生字节流的情况,如果你需要把返回的结果当一个String对待,这时只需要匿名实现一个

  TextHttpResponseHandler就行,其继承自AsyncHttpResponse,并将原生的字节流根据指定的encoding转化成了string对象,

  代码如下:

  AsyncHttpClient client = new AsyncHttpClient();

  RequestParams params = new RequestParams();

  params.put("key", "value");

  params.put("more", "data");

  client.get("http://www.google.com", params, new

  TextHttpResponseHandler() {

  @Override

  public void onSuccess(int statusCode, Header[] headers, String response)
{

  System.out.println(response);

  }

  @Override

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

  Log.d("ERROR", error);

  }

  }

  );

  同样的方式,你可以发送json请求,代码如下:

  String url = "https://ajax.googleapis.com/ajax/services/search/images";

  AsyncHttpClient client = new AsyncHttpClient();

  RequestParams params = new RequestParams();

  params.put("q", "android");

  params.put("rsz", "8");

  client.get(url, params, new JsonHttpResponseHandler() {

  @Override

  public void onSuccess(int statusCode, Header[] headers, JSONObject
response) {

  // Handle resulting parsed JSON response here

  }

  @Override

  public void onSuccess(int statusCode, Header[] headers, JSONArray response)
{

  // Handle resulting parsed JSON response here

  }

  });

  看到了没,返回的response已经自动转化成JSONObject了,当然也支持JSONArray类型,override你需要的那个版本就行。

  有了AsyncHttpClient,要实现这些功能是不是很简单呢?当然这里只是很初级的介绍和使用,剩下的还需要开发者自己参考官方

  文档、源码(官方甚至提供了一个Sample使用的集合),在实际项目中实践。最后,强烈建议大家使用,是时候和冗长乏味的代码说

回答2:

Android开发是往往需要查看Android源码,下面谈谈怎样让Elipse关联Android源码
1、下载Android源码 ,该版本的源码只有约7M 更多版本下载 http://repository.grepcode.com/java/ext/com/google/android/android/
2、解压源码,将文件夹命名为sources,再拷贝到/platforms/对应版本中, 如/platforms/android-7
现在打开Eclipse,选中某个Android类,按Ctrl,单击鼠标,跳转到相关类中,前提是/platforms/项目版本 中有源码。