android-async-http开源请求库

在iOS开辟中有赫赫有名的ASIHttpRequest库,用来处置网络请求作操,天今要分析的是一个在Android上一样大强的网络请求库android-async-http,现在非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个步异网络请求处置库,网络处置均基于Android的非UI线程,通过回调方法处置请求结果。

    其主要征特如下:

    

  • 处置步异Http请求,并通过匿名内部类处置回调结果
  • Http请求均位于非UI线程,不会塞阻UI作操
  • 通过线程池处置并发请求
  • 处置文件上传、载下
  • 响应结果动自打包JSON格式
  • 动自处置连接断开时请求重连

    

应用android-async-http也非常简略,到官网http://loopj.com/android-async-http/载下赖依jar包,导入程工中libs文件夹下并添加到程工径路便可。通过面下的代码来建创一个步异请求:
AsyncHttpClient
 client = new AsyncHttpClient();
                client.get("http://www.baidu.com",new AsyncHttpResponseHandler()
 {
                     
                    @Override
                    public void onSuccess(String
 response) {
                        System.out.println(response);
                        textView.setText(response);
                    }
                     
                    @Override
                    public void onStart()
 {
                        super.onStart();
                        System.out.println("onStart");
                    }
                     
                    @Override
                    public void onFinish()
 {
                        super.onFinish();
                        System.out.println("onFinish");
                    }
                     
                }
  通过Get请求指定的URL并通过回调函数处置请求结果,同时,请求方法还持支POST和PUT,请求的同时还持支数参传递,面下看看如何通过JSON字符串作为数参拜访服务器:
try {
                    JSONObject
 jsonObject = new JSONObject();
                    jsonObject.put("username","ryantang");
                    StringEntity
 stringEntity = new StringEntity(jsonObject.toString());
                    client.post(MainActivity.this,"http://api.com/login",
 stringEntity, "application/json",new JsonHttpResponseHandler(){
 
                        @Override
                        public void onSuccess(JSONObject
 jsonObject) {
                            super.onSuccess(jsonObject);
                             
                        }
                         
                    });
                }catch (JSONException
 e) {
                    e.printStackTrace();
                }catch (UnsupportedEncodingException
 e) {
                    e.printStackTrace();
                }
  官方推荐的应用方法,应用一个静态的请求象对,我们来看看官方例举的一个拜访Twitter的API的例子:
import com.loopj.android.http.*;

public class TwitterRestClient {
  private static final String BASE_URL = "http://api.twitter.com/1/";

  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;
  }
}
 
import org.json.*;
import com.loopj.android.http.*;

class TwitterRestClientUsage {
    public void getPublicTimeline() throws JSONException {
        TwitterRestClient.get("statuses/public_timeline.json", null, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(JSONArray timeline) {
                // Pull out the first event on the public timeline
                JSONObject firstEvent = timeline.get(0);
                String tweetText = firstEvent.getString("text");

                // Do something with the response
                System.out.println(tweetText);
            }
        });
    }
}
 

猜你喜欢

转载自201304154519.iteye.com/blog/2037957