AsyncHttpClient

 

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

 

你可能感兴趣的:(httpclient)