android开源框架android-async-http详细的使用介绍

本文对比了android-async-http与volley框架,指出前者更适合处理大文件的上传和下载。android-async-http特性包括异步HTTP请求、非UI线程处理、线程池并发、JSON格式自动处理和断线重连。集成步骤包括下载库、导入项目、配置请求。示例展示了GET请求、参数设置、文件上传和下载的实现。

1.在介绍android-async-http之前先和volley框架比较一下

volley更适用于数据交换比较频繁,数据的大小比较小数据量比较多的时候使用

android-async-http更适用于上传或者下载比较大的文件


2.android-async-http的特征

处理异步的http请求,并通过匿名内部类处理回调结果,Http异步请求均位于非UI线程,

不会阻塞UI操作。通过线程池处理并发请求处理文件上传、下载、响应结果自动化打包JSON格式

,自动处理连接断开时请求重连。


3.集成步骤

首先在官网下载点击打开链接导入工程中libs文件夹下并添加到工程路径即可。


在使用的时候还需要添加

compile 'cz.msebera.android:httpclient:4.4.1.1'

发送一个简单的get请求

<span style="font-size: 18px;">   </span><span style="font-size:14px;"> </span><span style="font-size:14px; white-space: pre;">		</span><span style="font-family:SimHei;font-size:12px;">//创建一个请求对象
                AsyncHttpClient client = new AsyncHttpClient();
                //使用get方法发送一个请求 参数是网络请求的地址,和成功失败的回调
                client.get("http://baidu.com/", new AsyncHttpResponseHandler() {
                    @Override
                    public void onSuccess(int i, Header[] headers, byte[] bytes) {
                        //bytes 是访问成功返回的数据 打印返回结果
                        String info = new String(bytes);
                        System.out.print(info);

                    }

                    @Override
                    public void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) {
                        //如果失败 打印访问失败的数据
                        String info = new String(bytes);
                        System.out.print(info);
                    }
                });</span>

请求参数设置

创建一个RequestParams添加请求参数

<span style="font-size:14px;"></span><pre name="code" class="java">          <span style="font-family: SimHei; font-size: 14px;">//设置请求的参数  原理和hashmap相似</span>
RequestParams requestParams = new RequestParams(); requestParams.put("key","value"); requestParams.put("more","data");

 

添加一个参数的时候使用

 RequestParams requestParams = new RequestParams("key","value");
创建一个带参数的post请求

<span style="font-size: 18px;"> </span><span style="font-family:SimHei;font-size:14px;"> <span style="white-space:pre">		</span>//创建一个请求对象
                AsyncHttpClient client1 = new AsyncHttpClient();
                //设置参数
                RequestParams params = new RequestParams();
                params.put("参数的key","参数的value值");
                //创建post请求
                client1.post("post请求的网络地址", params, new AsyncHttpResponseHandler() {
                    @Override
                    public void onSuccess(int i, Header[] headers, byte[] bytes) {
                    
                    }

                    @Override
                    public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {

                    }
                });</span>

现在上传一个文件或者字节数组

     //创建一个请求对象
                AsyncHttpClient client2 = new AsyncHttpClient();
                //在设置参数的时候 可以添加一个流对象
                RequestParams params1 = new RequestParams();
                //添加一个数组在io流中
//                ByteArrayInputStream in = new ByteArrayInputStream("jkjk".getBytes());
//                params1.put("key",in,"文件名字");

//                创建一个文件流
//                try {
//                    FileInputStream in = new FileInputStream("文件路径");
//                    params1.put("key",in,"文件名字");
//                } catch (FileNotFoundException e) {
//                    e.printStackTrace();
//                }


                //直接将文件传输
                //创建一个文件的路径
                String path = "文件的路径";
                try {
                    params1.put("key",new File(path),"文件传输类型");
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                client2.post(this, "网络地址", params1, new AsyncHttpResponseHandler() {
                    @Override
                    public void onSuccess(int i, Header[] headers, byte[] bytes) {

                    }

                    @Override
                    public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {

                    }
                });


做文件的下载

使用 FileAsyncHttpResponseHandler 处理器处理

AsyncHttpClient client3 = new AsyncHttpClient();
                client3.get("下载地址", new FileAsyncHttpResponseHandler(this) {
                    //失败
                    @Override
                    public void onFailure(int i, Header[] headers, Throwable throwable, File file) {

                    }
                    //成功
                    @Override
                    public void onSuccess(int i, Header[] headers, File file) {
                        //打印存储路径
                        System.out.print(file.getAbsolutePath());
                        //创建建一个你要存储的路径
                        String path = "路径";
                        try {
                            //获得文件流
                            InputStream inputStream = new FileInputStream(file);
                            //创建文件输出流
                            OutputStream outputStream = new FileOutputStream(path);
                            int len = -1;
                            byte[] b = new byte[1024];
                            while((len=inputStream.read(b))!=-1){
                                outputStream.write(b,0,len);
                                outputStream.flush();
                            }
                            inputStream.close();
                            outputStream.close();
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });

android-async-http也可以获取json数据使用的是JsonHttpResponseHandler(在这里不介绍了)


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值