需要帮助将AsyncTask转换为RxJava
我今天潜入RxJava。需要帮助将AsyncTask转换为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。我只是需要一些开始。
我看到这个示例代码,使用只要它将整数传递给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
类似这样的:
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();
}
难道你不能使用lambda表达式...我还不熟悉,我想如何将我的字符串作为参数传递给getBitmap()方法? –
@HtmlTosin更新; 'gitBitmap()'只是一个放置你的Glide特定逻辑的地方 – AndroidEx
嗨,它的工作,但然后我不得不删除“mSubscription”变量,并将其作为“Observable.defer”使用......它说“找不到符号'mSubscription'“。为什么呢? –
这篇文章做得很好解释如何做到这一点:
只有链接的答案应包含示例代码,以防链接在某些时候出现故障。 –
您需要在文档中进一步介绍如何创建可观察性的部分 – njzk2