Java 使用RxWorker压缩和上载多个文件,并取得进展

Java 使用RxWorker压缩和上载多个文件,并取得进展,java,android,retrofit2,rx-java2,android-workmanager,Java,Android,Retrofit2,Rx Java2,Android Workmanager,我试图上传多个图像到服务器,在此之前,我想压缩我的图像。对于压缩部分,我在项目中使用库来压缩用户的选定图像,然后以RxJava方式上载部分。我在演讲者课上做了所有的事情,所有这些都正常工作。我的问题是我想在我的UploadWorker类中完成所有这些,它是从RxWorker继承的,并且在执行上载时在通知中显示进度。 我编写的代码工作不正常,通知进度没有正确更新 这是我的上传工人。班级 public类UploadWorker扩展了RxWorker{ private static final Str

我试图上传多个图像到服务器,在此之前,我想压缩我的图像。对于压缩部分,我在项目中使用库来压缩用户的选定图像,然后以RxJava方式上载部分。我在演讲者课上做了所有的事情,所有这些都正常工作。我的问题是我想在我的UploadWorker类中完成所有这些,它是从RxWorker继承的,并且在执行上载时在通知中显示进度。 我编写的代码工作不正常,通知进度没有正确更新

这是我的上传工人。班级

public类UploadWorker扩展了RxWorker{
private static final String TAG=UploadWorker.class.getSimpleName();
公共静态最终字符串键\u String\u DATA=“String\u DATA”;
私有静态最终int压缩_MAX_SIZE=200;
私有静态最终整数进度_MAX=100;
私人语境;
私有文件上传器;
公共UploadWorker(@NonNull上下文,@NonNull WorkerParameters workerParams){
超级(上下文、工作参数);
this.context=上下文;
ApiService ApiService=ServiceBuilder.buildService(ApiService.class);
uploader=新文件上传器(apiService);
}
@非空
@凌驾
公共单个createWork(){
数据数据=getInputData();
String strData=data.getString(KEY\u String\u data);
List stringList=反序列化FromJSON(strData);
列表文件=新的ArrayList();
用于(字符串路径:stringList){
文件f=新文件(路径);
添加(f);
}
返回Single.fromObservable(Luban.compress)(上下文、文件)
.setMaxSize(压缩最大大小)
.putGear(鲁班定制齿轮)
.setCompressFormat(位图.CompressFormat.JPEG)
.asListObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(新函数(){
@凌驾
公共ArrayList应用(列表文件)引发异常{
ArrayList filListPath=新的ArrayList();
用于(文件:文件){
add(file.getAbsolutePath());
}
返回filListPath;
}
})
.map(新函数(){
@凌驾
公共一次性应用(ArrayList字符串)引发异常{
HashMap=newHashMap();
返回getUploadObserver(映射,字符串);
}
}).map(新函数(){
@凌驾
公共结果应用(一次性)引发异常{
返回Result.success();
}
})
);
}
私有一次性getUploadObserver(HashMap映射、ArrayList文件){
返回uploader.uploadMultiImage(映射、文件)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新消费者){
@凌驾
public void accept(双进度)引发异常{
通知上传((int)(100*进度));
Log.d(标记“接受:”+(int)(100*progress));
}
});
}
公共上传(int进度){
NotificationManagerCompat NotificationManagerCompat=NotificationManagerCompat.from(上下文);
NotificationCompat.Builder=新建NotificationCompat.Builder(上下文,Config.NOTIFICATION\u通道);
builder.setSmallIcon(R.drawable.ic_通知_图标)
.setContentTitle(“上载”)
.setContentText(“正在上载”)
.setPriority(通知兼容优先级低)
.setAutoCancel(真);
如果(进度
FileUploader.class

公共类FileUploader实现FileUploaderContract{
私人最终医疗服务;
private static final String TAG=FileUploaderModel.class.getSimpleName();
公共文件上传模型(ApiService服务){
服务=服务;
}
@凌驾
公共流可上载多映像(HashMap映射、ArrayList文件路径){
返回FlowTable.create(新建FlowTableOnSubscribe(){
@凌驾
public void subscribe(FlowableEmitter发射器)引发异常{
试一试{
List myPart=new ArrayList();
for(字符串路径:文件路径){
add(createMultipartBody(路径,发射器));
}
ResponseBody response=service.postMultipleImage(map,myPart.blockingGet();
Log.d(标记“订阅:+响应”);
emitter.onComplete();
}捕获(例外e){
发射极tryOnError(e);
}
}
},背压等级。最新版本);
}
@非空
private RequestBody createPartFromString(字符串描述字符串){
返回RequestBody.create(MultipartBody.FORM,descriptionString);
}
私有多部分主体。第1部分