这次主要是对下载请求的封装,这次又扩展了IHttpListener接口,增家了取消和暂停的请求。而毁掉接口主要回调的有进度的变化和下载的速度,成功和失败的回调。其中一个实体类DownLoadInfo主要保存了地址和下载期间其中进度和下载状态的变化,里面最著要的方法就是对其序列化和反序列化操作,使调用者得到的是一个拷贝对象,阻止了其对下载状态的改变。下载数据的service也增加了一个头文件,主要作用就是保存下载进度,使其支持断点下载。其他的代码类似json文本请求的代码
下载信息的基类代码:
public class BaseEntity <T> implements Serializable{
private static final long serialVersionUID=1L;
public BaseEntity(){}
//序列化和反序列化 得到一个新的对象
public T copy(){
ByteArrayOutputStream byteArrayOutputStream=null;
ObjectOutputStream objectOutputStream=null;
try {
byteArrayOutputStream=new ByteArrayOutputStream();
objectOutputStream=new ObjectOutputStream(byteArrayOutputStream);
//序列化调用者
objectOutputStream.writeObject(this);
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream objectInputStream=new ObjectInputStream(byteArrayInputStream);
Object result=objectInputStream.readObject();
return (T) result;
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}finally {
if (byteArrayOutputStream!=null){
try {
byteArrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (objectOutputStream!=null){
try {
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
回调接口:
package volly.gjh.com.myvolley.http.download.interfaces;
import volly.gjh.com.myvolley.http.download.DownloadItemInfo;
/**
* Created by Administrator on 2017/11/18.
*/
//调用层下载回调的接口
public interface IDownloadServiceCallable {
void onDownloadStatusChanged(DownloadItemInfo downloadItemInfo);
void onTotalLengthReceived(DownloadItemInfo downloadItemInfo);
void onCurrentSizeChanged(DownloadItemInfo downloadItemInfo,double downLength,long speed);
void onDownloadSuccess(DownloadItemInfo downloadItemInfo);
void onDownloadPause(DownloadItemInfo downloadItemInfo);
void onDownloadError(DownloadItemInfo downloadItemInfo, int var2, String var3);
}
其他大部分代码和json文本的请求类似,将要的实现的是断点下载,主要结合的是数据库,因为需要保存下载的进度,当保存在内存中的时候,如果退出应用保留的信息将会丢失。