1.基本写法
Observable.just("https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2019/5/17/16ac4f7f486ca77a~tplv-t2oaga2asx-image.image")
.map(new Function<String, Bitmap>() {
@Override
public Bitmap apply(String urlPath) throws Exception {
URL url = new URL(urlPath);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
}).subscribe(new Consumer<Bitmap>() {
@Override
public void onNext(final Bitmap bitmap) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mImage.setImageBitmap(bitmap);
}
});
}
});
2.map做了什么
跟RxJava源码阅读(一) 一样Observable.just()创建了一个ObservableJust,通过map操作符后生成了一个ObservableMap
public ObservableMap(ObservableSource<T> source, Function<? super T, ? extends U> function) {
super(source);
this.function = function;
}
ObservableMap构造方法中第一个参数持有了ObservableJust引用,相当于是ObservableJust的动态代理。同样,最终执行的是ObservableMap的subscribeActual方法
@Override
public void subscribeActual(Observer<? super U> t) {
source.subscribe(new MapObserver<T, U>(t, function));
}
其中source就是传入的ObservableJust,只是在调用subscribe方法时又包裹了下,将传入的Observer包装成MapObserver
3.总结
Observable.just("")
.map(new Function<String, String>() {
@Override
public String apply(String urlPath) {
return urlPath;
}
})
.map(new Function<String, String>() {
@Override
public String apply(String urlPath) {
return urlPath;
}
}).subscribe(new Consumer<String>() {
@Override
public void onNext(final String bitmap) {
}
});
