RxDownload3踩坑
总结一下使用RxDownload3遇到的坑
1.多个item下载状态同步,下载的都是同一个文件,或是下载的空文件
1.原因:RxDownload3默认使用url作为tag,我的项目中下载的url需要通过两次请求才能获取到,所以我把默认地址改为”NONE”,导致了只下载了同一个文件。
1.解决:重新给tag赋值,赋值为唯一的。
2.从数据库获取文件,返回的Maybe包裹的。
//获取数据库列表
Maybe<List<Mission>> allMission = RxDownload.INSTANCE.getAllMission();
2.解决:
我这里写了个笨办法进行转换的
@Override
public Observable<List<Mission>> getDownloadMissions() {
//获取数据库列表
Maybe<List<Mission>> allMission = RxDownload.INSTANCE.getAllMission();
return allMission.toObservable();
}
//进行转换
.subscribe(new ProgressSubcriber<List<Mission>>(mContext, mView) {
@Override
public void onNext(List<Mission> missions) {
//创建一个子类的集合
List<DownloadMission> downloadMissions = new ArrayList<>();
//遍历获取集合
for (int i = 0; i < missions.size(); i++) {
downloadMissions.add((DownloadMission) missions.get(i));
}
//展示 mView.showDownloading(downloadRecordFilter(downloadMissions));
}
});
3.获取数据库中文件下载状态,下载状态是在Mission中已经创建好的,我们做的只需要获取。
public DownloadMission(Mission mission,int status) {
super(mission);
this.setStatus(status);
}
//自定义数据库继承Rxdownload中的数据库
public class DownloadSqliteActor extends SQLiteActor {
/**
* 获取拓展的数据库的内容
*
* @param cursor
* @return
*/
@NotNull
@Override
public Mission onGetAllMission(@NotNull Cursor cursor) {
Mission mission = super.onGetAllMission(cursor);
// 获取数据库的 状态
int statusFlag = cursor.getInt(cursor.getColumnIndexOrThrow("status_flag"));
//以一个new bean的方式获取数据库内容
return new DownloadMission(mission, statusFlag);
}
}
项目地址:https://gitee.com/xiaoduv587/ShouJiZhuShou/tree/v1,关于download3拓展的文件在bean.downloadBean中。