AsyncHttpClient来异步网络数据

AsyncHttpClient是异步的,但是有时候我们需要得到请求的结果集来返回给某个函数,由于是异步的,所以不能够直接return会去,所以可以定义一个interface来给调用AsyncHttpClient方法的一个回调来获取结果集。

 

 1 public void click(View view) {
 2         AsyncHttpClient client = new AsyncHttpClient();
 3         try {
 4             String url = "http://url?name="
 5                     + URLEncoder.encode("aaa", "utf-8") + "&pass="
 6                     + URLEncoder.encode("bbb", "utf-8");
 7             client.get(url, new AsyncHttpResponseHandler() {
 8                 @Override
 9              public void onSuccess(int statusCode, Header[] headers,
10                         byte[] responseBody) {
11                     super.onSuccess(statusCode, headers, responseBody);
12 
13                     Toast.makeText(Main.this,
14                             "请求成功" + new String(responseBody), 0).show();
15                 }
16 
17                 @Override
18               public void onFailure(int statusCode, Header[] headers,
19                         byte[] responseBody, Throwable error) {
20                     // TODO Auto-generated method stub
21                 super.onFailure(statusCode, headers, responseBody, error);
22                 }
23             });
24         } catch (Exception e) {
25         }
26 
27     }
28 
29     public void postclick(View view) {
30         try {
31             AsyncHttpClient client = new AsyncHttpClient();
32             String url = "http://url";
33             RequestParams params = new RequestParams();
34             params.put("name", "张三");
35             params.put("pass", "123456");
36            client.post(url, params, new AsyncHttpResponseHandler() {
37 
38                 @Override
39                 public void onSuccess(int statusCode, Header[] headers,
40                         byte[] responseBody) {
41                     super.onSuccess(statusCode, headers, responseBody);
42                    Toast.makeText(Main.this,
43                            "请求成功" + new String(responseBody), 0).show();
44                 }
45 
46             });
47 
48         } catch (Exception e) {
49             // TODO: handle exception
50         }
51 
52     }
53 
54     public void btnupfile(View view) {
55 
56         AsyncHttpClient client = new AsyncHttpClient();
57 
58         RequestParams params = new RequestParams();
59 
60         try {
61             File file = new File("/sdcard/1.jpg");
62             System.out.println(file);
63             params.put("pic", file);
64 
65           client.post("http://url", params,
66                   new AsyncHttpResponseHandler() {
67                    @Override
68                     public void onSuccess(int statusCode, Header[] headers,
69                         byte[] responseBody) {
70                         super.onSuccess(statusCode, headers, responseBody);
71                         Toast.makeText(Main.this,
72                                   "上传文件成功!", 0).show();
73                         }
74                     });
75 
76         } catch (Exception e) {
77             // TODO Auto-generated catch block
78             e.printStackTrace();
79         }
80 
81     }

  android-async-http 开源框架可以使我们轻松地获取网络数据或者向服务器发送数据,最关键的是,它是异步框架,在底层使用线程池处理并发请求,效率很高,使用又特别简单。

    以往我们在安卓上做项目,比如要下载很多图片、网页或者其他的资源,多数开发者会选择一个线程一个下载任务这种模型,因为安卓自带的 AndroidHttpClient 或者 java 带的 java.net.URL ,默认都是阻塞式操作。这种模型效率不高,对并发要求高的 APP 来讲,并不适用。有的人会选择使用 nio 自己实现,代码复杂度又很高。

    AsyncHttpClient 作为 android-async-http 框架的一个核心应用类,使用简单,可以处理文本、二进制等各种格式的 web 资源。下面提供一些代码来看如何使用:

 1 public class Downloader {
 2     public static AsyncHttpClient mHttpc = new AsyncHttpClient();
 3     public static String TAG = "Downloader";
 4     
 5     public void downloadText(String uri){
 6         mHttpc.get(uri, null, new AsyncHttpResponseHandler(){
 7             @Override
 8             public void onSuccess(String data){
 9             Log.i(TAG, "downloaded, thread id " + Thread.currentThread().getId());
10                 // TODO: do something on
11             }
12             @Override
13             public void onFailure(Throwable e, String data){
14                 Log.i(TAG, "download failed.");
15                 // TODO: error proceed
16             }
17         });
18     }
19     
20     public void downloadImage(String uri, String savePath){
21         mHttpc.get(uri, new ImageResponseHandler(savePath));
22     }
23     
24     public class ImageResponseHandler extends BinaryHttpResponseHandler{
25         private String mSavePath;
26         
27         public ImageResponseHandler(String savePath){
28             super();
29             mSavePath = savePath;
30         }
31         @Override
32         public void onSuccess(byte[] data){
33             Log.i(TAG, "download image, file length " + data.length);
34             // TODO: save image , do something on image
35         }
36         @Override
37         public void onFailure(Throwable e, String data){
38             Log.i(TAG, "download failed");
39             // TODO : error proceed
40         }
41     }
42 };

 

posted on 2014-09-23 11:38  xuan轩  阅读(1747)  评论(0编辑  收藏  举报