断点续传下载

Android网络编程之断线续传

xUtils简介

  1. xUtils 包含了很多实用的android工具。
  2. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...

目前xUtils主要有四大模块:

  1. DbUtils模块
  2. ViewUtils模块:
    • android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
    • 完全注解方式就可以进行UI绑定和事件绑定。
    • 无需findViewById和setClickListener等。
  3. HttpUtils模块:这是断点续传要用到的。
  4. 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) 	
}
});	
}
});

开源项目的使用实现快速开发

原文地址:https://www.cnblogs.com/stephenhuashao/p/5603478.html