Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从onNext()访问Observable.range()索引_Java_Retrofit2_Rx Java2_Rx Android - Fatal编程技术网

Java 如何从onNext()访问Observable.range()索引

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

我在下面编写了RXjava代码,用于将图像列表上传到服务器。从服务器端,它将发送一个关于上传图像链接的响应。我将这些图像保存在本地存储中,如果只有特定图像成功上载,我应该从本地存储中删除该图像

    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