我今天潜入RxJava。
我有一个将图像转换为位图的AsyncTask并将其设置为Imageview。
我想将我的AsyncTask转换为RxJava
这是我在下面的AsyncTask工作:
String imageurl = "http://example.com/image.jpg";
new AsyncTask<String, Void, Void>() {
Bitmap theBitmap = null;
@Override
protected Void doInBackground(String... params) {
String TAG = "Message: ";
try {
theBitmap = Glide.
with(mContext).
load(mValues.get(params[0]).
asBitmap().
into(-1, -1).
get();
} catch (final ExecutionException e) {
Log.e(TAG, e.getMessage());
} catch (final InterruptedException e) {
Log.e(TAG, e.getMessage());
} catch (final NullPointerException e) {
Log.e(TAG, e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Void dummy) {
if (null != theBitmap) {
ImageView mImageView = (ImageView) findViewById(R.id.image);
mImageView.setImageBitmap(theBitmap);
}
}
}.execute(imageurl);
我知道我想提供我尝试过的代码,但是我在试图绕过RxJava时遇到了问题。我只需要一些东西开始。
我看到这个示例代码,使用Just where It将Integers传递给onNext()函数。 http://reactivex.io/documentation/operators/just.html
Observable.just(1, 2, 3)
.subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
请问,我怎样才能转换这段代码,所以我可以像AsyncTask一样使用它
答案 0 :(得分:3)
这样的事情:
mSubscription = Observable.defer(new Func0<Observable<Bitmap>>() {
@Override
public Observable<Bitmap> call() {
return Observable.just(getBitmap(imageurl));
}
})
.filter(new Func1<Bitmap, Boolean>() {
@Override
public Boolean call(Bitmap bitmap) {
return bitmap != null;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Bitmap>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable throwable) {
Log.e(TAG, e.getMessage());
}
@Override
public void onNext(Bitmap bitmap) {
ImageView mImageView = (ImageView) findViewById(R.id.image);
mImageView.setImageBitmap(bitmap);
}
});
/* later in onDestroy(), onStop(), etc */
if (mSubscription != null && !mSubscription.isUnsubscribed()) {
mSubscription.unsubscribe();
}
答案 1 :(得分:0)