Android网络请求库android-async-http使用

在 iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果。
其主要特征如下:
处理异步Http请求,并通过匿名内部类处理回调结果
Http请求均位于非UI线程,不会阻塞UI操作
通过线程池处理并发请求
处理文件上传、 下载
响应结果自动打包JSON格式
自动处理连接断开时请求重连
使用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();    
                }    

官方推荐的使用方法,使用一个静态的请求对象
public class HttpUtil {  
  
    private static AsyncHttpClient client = new AsyncHttpClient(); // 实例话对象  
  
    static {  
  
        client.setTimeout(10000); // 设置链接超时,如果不设置,默认为10s  
    }  
  
    // 用一个完整url获取一个string对象  
    public static void get(String urlString, AsyncHttpResponseHandler res)   
    {  
  
        client.get(urlString, res);  
  
    }  
  
    // url里面带参数  
    public static void get(String urlString, RequestParams params,  
            AsyncHttpResponseHandler res){  
  
        client.get(urlString, params, res);  
  
    }  
  
    // 不带参数,获取json对象或者数组  
    public static void get(String urlString, JsonHttpResponseHandler res) {  
        client.get(urlString, res);  
  
    }  
  
    // 带参数,获取json对象或者数组  
    public static void get(String urlString, RequestParams params,  
            JsonHttpResponseHandler res) {  
  
        client.get(urlString, params, res);  
  
    }  
  
    // 下载数据使用,会返回byte数据  
    public static void get(String uString, BinaryHttpResponseHandler bHandler) {  
  
        client.get(uString, bHandler);  
  
    }  
  
    public static AsyncHttpClient getClient(){  
  
        return client;  
    }  
  
}  

下载:
public void downloadClick(View view) {  
       String url = "http://f.hiphotos.baidu.com/album/w%3D2048/sign=38c43ff7902397ddd6799f046dbab3b7/9c16fdfaaf51f3dee973bf7495eef01f3b2979d8.jpg";  
       HttpUtil.get(url, new BinaryHttpResponseHandler() {  
           @Override  
           public void onSuccess(byte[] arg0) {  
               super.onSuccess(arg0);  
               File file = Environment.getExternalStorageDirectory();  
               File file2 = new File(file, "cat");  
               file2.mkdir();  
               file2 = new File(file2, "cat.jpg");  
               try {  
                   FileOutputStream oStream = new FileOutputStream(file2);  
                   oStream.write(arg0);  
                   oStream.flush();  
                   oStream.close();  
                   textView.setText("可爱的猫咪已经保存在sdcard里面");  
               } catch (Exception e) {  
                   e.printStackTrace();  
                   Log.i("hck", e.toString());  
               }  
           }  
       });  
   }  

上传:
public void uploadClick(View view){  
        String path="http://10.0.2.2:8080/jsontest/servlet/UploadServlet";  
        File myFile = new File("/sdcard/cat/cat.jpg");  
        RequestParams params = new RequestParams();  
        try {  
            params.put("filename", myFile);  
              
            AsyncHttpClient client = new AsyncHttpClient();  
            client.post(path, params, new AsyncHttpResponseHandler(){  
  
                @Override  
                public void onSuccess(int statusCode, String content) {  
                    // TODO Auto-generated method stub  
                    super.onSuccess(statusCode, content);  
                    Toast.makeText(MainActivity.this, "上传成功!", Toast.LENGTH_LONG).show();  
                }  
                  
                  
            });  
              
        } catch(FileNotFoundException e) {  
              
        }  
    }  
由于涉及网络请求,最后别忘了添加权限:
<uses-permission android:name="android.permission.INTERNET" />



------------------------------------------------------------------------
官方推荐的使用方法,使用一个静态的请求对象,我们来看看官方例举的一个访问Twitter的API的例子:

使用方法:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值