Java 如何从onNext()访问Observable.range()索引
我在下面编写了RXjava代码,用于将图像列表上传到服务器。从服务器端,它将发送一个关于上传图像链接的响应。我将这些图像保存在本地存储中,如果只有特定图像成功上载,我应该从本地存储中删除该图像Java 如何从onNext()访问Observable.range()索引,java,retrofit2,rx-java2,rx-android,Java,Retrofit2,Rx Java2,Rx Android,我在下面编写了RXjava代码,用于将图像列表上传到服务器。从服务器端,它将发送一个关于上传图像链接的响应。我将这些图像保存在本地存储中,如果只有特定图像成功上载,我应该从本地存储中删除该图像 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); final String accessToken = sharedPref.getString(getString(R.s
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
final String accessToken = sharedPref.getString(getString(R.string.access_token), "");
final ArrayList<String> imageLinks = new ArrayList<>();
Observable
.range(0, ImageFilePaths.size())
.flatMap(new Function<Integer, ObservableSource<ProductImageUploadResponse>>() {
@Override
public ObservableSource<ProductImageUploadResponse> apply(Integer index) {
JSONObject imageUploadKJsonObj = new JSONObject();
try {
imageUploadKJsonObj.put("version", "1.0");
imageUploadKJsonObj.put("action", "uploadimage");
} catch (JSONException e) {
e.printStackTrace();
}
File file = new File(ImageFilePaths.get(index));
MultipartBody.Part filePart = MultipartBody.Part.createFormData("Image", file.getName(),
RequestBody.create(MediaType.parse("image/*"), file));
RequestBody accessTokenRequestBody = RequestBody.create(MediaType.parse("text/plain"), accessToken);
RequestBody imageUploadRequestBody = RequestBody.create(MediaType.parse("text/plain"), imageUploadKJsonObj.toString());
return APIservice.uploadProductImageRx(accessTokenRequestBody, imageUploadRequestBody, filePart);
}
})
.retry(3)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableObserver<ProductImageUploadResponse>() {
@Override
public void onNext(ProductImageUploadResponse productImageUploadResponse) {
if(productImageUploadResponse.getResult() == 0){
imageLinks.add(productImageUploadResponse.getImage());
//Delete image from local storage
}
}
@Override
public void onError(Throwable e) {
// Handel this
}
@Override
public void onComplete() {
// Next operation
submitRequestEnquiryProduct(imageLinks);
}
});
SharedReferences SharedReferences=PreferenceManager.GetDefaultSharedReferences(此);
最终字符串accessToken=sharedPref.getString(getString(R.String.access_token),“”);
最终ArrayList imageLinks=新ArrayList();
可观察
.range(0,ImageFilePath.size())
.flatMap(新函数(){
@凌驾
公共可观测资源应用(整数索引){
JSONObject ImageUploadkJSONObject=新建JSONObject();
试一试{
imageUploadKJsonObj.put(“版本”,“1.0”);
imageUploadKJsonObj.put(“action”,“uploadimage”);
}捕获(JSONException e){
e、 printStackTrace();
}
File File=新文件(imagefilepath.get(index));
MultipartBody.Part filePart=MultipartBody.Part.createFormData(“Image”,file.getName(),
create(MediaType.parse(“image/*”,file));
RequestBody accessTokenRequestBody=RequestBody.create(MediaType.parse(“text/plain”),accessToken;
RequestBody imageUploadRequestBody=RequestBody.create(MediaType.parse(“text/plain”),imageUploadKJsonObj.toString();
返回APIservice.uploadProductImageRx(accessTokenRequestBody、imageUploadRequestBody、filePart);
}
})
.重试(3)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.认购(新的可处置观察员){
@凌驾
public void onNext(ProductImageUploadResponse ProductImageUploadResponse){
if(productImageUploadResponse.getResult()==0){
add(productImageUploadResponse.getImage());
//从本地存储中删除图像
}
}
@凌驾
公共无效申报人(可丢弃的e){
//汉德尔这个
}
@凌驾
未完成的公共空间(){
//下一次手术
SubmitRequestequiryProduct(ImageLink);
}
});
问题是如何在
onNext()
方法中访问上传图像的索引以将其删除。如果可以从imagefilepath
数组列表访问索引,我可以获取路径并将其删除。有什么方法可以做到这一点吗?将APIservice映射。将ProductImageRx
返回的可观察的上传到整数的对+ProductImageUploadResponse
int[]index={0}代码><代码>索引[0]++
在onNext
@akarnokd flat map不能返回Pair,它应该是可观察的。@zhh发生错误时会发生什么?谁说flatMap回调的返回应该是Pair?映射uploadProductImageRx的结果:APIservice.uploadProductImageRx(accessTokenRequestBody,imageUploadRequestBody,filePart)。映射(res->Pair.of(index,res))
,并根据需要将返回类型调整为可观察的和Pair
。