【问题标题】:Upload progress with RxJava, Retrofit使用 RxJava、Retrofit 上传进度
【发布时间】:2017-02-20 04:35:00
【问题描述】:

在我的项目中,我使用 MVP 设计模式、RxJava、RxAndroid 和 Retrofit 来使用 API 调用。目前,我正在寻找在发送图片时尝试显示上传进度的解决方案。我已经看到了几个可能的实现,但恐怕它们不适合我的实现。以下是我使用我提到的库使用 API 调用的方式:

Subscription subscription = mApiService.modVideoFromVideoController(userHash, videoId, publicVideo, rate)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ModifyVideoResponse>() {
                    @Override
                    public void onCompleted() {
                        Log.d(TAG, "modVideo onCompleted");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, e.getMessage());
                        Crashlytics.logException(e);
                    }

                    @Override
                    public void onNext(ModifyVideoResponse modifyVideoResponse) {
                        mVideosPresenter.onVideoEdited(position, publicVideo);
                    }
                });
        mCompositeSubscription.add(subscription);

有没有办法做到这一点?

【问题讨论】:

  • 解决方案是通过onNext() 发出进度更新 - 您的 API 是否支持这种方法?
  • @Egor 不,它没有。还有其他不涉及后端的可能解决方案吗?

标签: android rx-java


【解决方案1】:

实现这一目标的最佳方法是使用副作用方法。

对于进度视图隐藏/显示:

用 doOnSubscribe() 和 doFinally() 绑定这两个事件。 这是两个运算符,所以我们可以在逻辑上将它们与 RxCall 绑定。

doOnSubscribe() 将在您附加到订阅者时被调用。

doFinaly() 将在最后被调用。在任何情况下都是成功或错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多