首页 > 解决方案 > 如何从 onNext() 访问 Observable.range() 索引

问题描述

我在 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);
                }
            });

问题是如何在onNext()删除它的方法中访问上传图像的索引。如果可以从ImageFilePaths数组列表访问索引,我可以获取路径并将其删除。有没有办法做到这一点?

标签: javaretrofit2rx-java2rx-android

解决方案


推荐阅读