背景:
我正在尝试使用Glide和rxjava2加载图像(以利用后台线程)。
我仍然对rxjava2 api的每个组件如何工作感到困惑。
下面是我的问题。
问题1:是否不可能add
Single
到CompositeDisposable
?
每当我尝试将Single
添加到CompositeDisposable
时,Android Studio都会警告我类型不匹配。
但是,如果我在toObservable()
之前致电subscribeOn
,错误消息就会消失。
第二季度:如果有问题,请改用rxjava2
对Glide
的使用。
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() {
}
}
)
);
}
答案 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;