Rxjava2:Single&CompositeDisposable

时间:2018-09-10 08:27:57

标签: android rx-java2

背景:

我正在尝试使用Glide和rxjava2加载图像(以利用后台线程)。

我仍然对rxjava2 api的每个组件如何工作感到困惑。

下面是我的问题。

问题1:是否不可能add SingleCompositeDisposable

每当我尝试将Single添加到CompositeDisposable时,Android Studio都会警告我类型不匹配。

但是,如果我在toObservable()之前致电subscribeOn,错误消息就会消失。

第二季度:如果有问题,请改用rxjava2Glide的使用。

   private void loadImages(final String imageUri) {
            Single<GlideRequest<Drawable>> glideSingle = Single.fromCallable(
                    new Callable<GlideRequest<Drawable>>() {
                        @Override
                        public GlideRequest<Drawable> call() {
                            return GlideApp.with(MainActivity.this).load(imageUri);
                        }
                    }
            );

            // mSubscription is just new CompositeDisposable()
            mSubscription.add(
                glideSingle
                        .toObservable() // I have to call this to suppress error message
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribeWith(
                                new DisposableObserver<GlideRequest<Drawable>>() {
                                    @Override
                                    public void onNext(GlideRequest<Drawable> drawableGlideRequest) {
                                        RequestOptions backgroundTransformOptions = new RequestOptions()
                                                .transforms(
                                                        new CenterCrop(),
                                                        new BlurTransformation(60),
                                                        new ColorFilterTransformation(
                                                                ContextCompat.getColor(MainActivity.this, R.color.colorBackgroundOverlay))
                                                );

                                        drawableGlideRequest
                                                .into(mAlbumArt);

                                        drawableGlideRequest
                                                .apply(backgroundTransformOptions)
                                                .into(mMainBackground);
                                    }

                                    @Override
                                    public void onError(Throwable e) {

                                    }

                                    @Override
                                    public void onComplete() {

                                    }
                                }
                        )
            );
        }

1 个答案:

答案 0 :(得分:0)

而不是 subscribeWith ,您应该可以使用常规的 subscribe 方法。

这将返回一个Disposable,例如如果没有lambda支持,它将看起来像这样:

select data1, sum(cnt) as cnt,
       max(case when seqnum = 1 then data2 end) as mode,
       max(cnt) as mode_cnt
from (select data1, data2, count(*) as cnt,
             row_number() over (partition by data1 order by count(*) desc) as seqnum
      from t
      group by data1, data2
     ) t
group by data1;