Android网络编程之断线续传
xUtils简介
- xUtils 包含了很多实用的android工具。
- xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
目前xUtils主要有四大模块:
- DbUtils模块
- ViewUtils模块:
- android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
- 完全注解方式就可以进行UI绑定和事件绑定。
- 无需findViewById和setClickListener等。
- HttpUtils模块:这是断点续传要用到的。
- BitmapUtils模块
使用xUtils快速开发框架需要有以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
HttpUtils使用方法:
使用HttpUtils下载文件:
HttpUtils http = new HttpUtils();
HttpHandler handler = http.download("http://apache.dataguru.cn/httpcomponents/httpclient/source/httpcomponents-client-4.2.5-src.zip",
"/sdcard/httpcomponents-client-4.2.5-src.zip",
true, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。
new RequestCallBack<File>() {
@Override
public void onStart() {
testTextView.setText("conn...");
}
@Override
public void onLoading(long total, long current, boolean isUploading) {
testTextView.setText(current + "/" + total);
}
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
testTextView.setText("downloaded:" + responseInfo.result.getPath());
}
@Override
public void onFailure(HttpException error, String msg) {
testTextView.setText(msg);
}
});
...
//调用cancel()方法停止下载
handler.cancel();
...
## xUtils断点续传的项目使用Demo:
### 第一步:下载下载开源xUtils
- 在github中搜索xUtils,找到对于语言java编写的开源项目
### 第二步:开源xUtils源码包导入到android项目下
- 解压下载的xUtils源码包,从里面`library`-->src-->`com`把此目录下的导入自己的android项目中
### 第三步:调用开源项目封装好的方法实现断点续传逻辑
//[0]找到我们关心的控件
ed_path = (EditText) findViewById(R.id.ed_path);
pb= (ProgressBar) findViewById(R.id.progressBar1);
Button btn = (Button) findViewById(R.id.btn);
btn = (Button) findViewById(R.id.btn);
//点击按钮实现断点续传下载的逻辑
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//[1]获取下载路径
String path = ed_path.getText().toString().trim();
//[2]创建httputils对象
HttpUtils http = new HttpUtils();
//[3]实现断点下载逻辑
/**
* url 下载路径
* target 下载文件的路径
* autoResume 是否支持断点续传 boolean类型
* callback 回调事件
*/
http.download(path, "/mnt/sdcard/heihei.exe", true, new RequestCallBack<File>() {
//下载成功 注意下载成功与请求成功是有区别的
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
Toast.makeText(getApplicationContext(), "下载成功", 1).show();
}
/**
* 重写onLoading方法
* total参数 代表总进度
* current 代表当前进度
*/
@Override
public void onLoading(long total, long current,
boolean isUploading) {
pb.setMax((int) total); //设置进度条的最大值
pb.setProgress((int) current); //设置当前进度条的当前进度
}
//下载失败的回调
@Override
public void onFailure(HttpException error, String msg)
}
});
}
});