Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用RxJava可观察对象进行延续?_Java_Android_Rx Java_Rx Android - Fatal编程技术网

如何使用RxJava可观察对象进行延续?

如何使用RxJava可观察对象进行延续?,java,android,rx-java,rx-android,Java,Android,Rx Java,Rx Android,所以我有一个异步操作A,它依赖于第二个B。我如何使B成为a的延续,就像您使用Javascript Promissions函数或.NET TPL中的函数一样 让我们看一下Android的场景,我有两个服务端点: 一个用于获取图像的URL 一个用于获取图像本身 代码: private void loadImage(最终图像视图){ 可观察的stringObs=getImageUrlAsync(); stringObs.subscribe(新操作1(){ @凌驾 公共无效调用(字符串imageUr

所以我有一个异步操作
A
,它依赖于第二个
B
。我如何使B成为a的延续,就像您使用Javascript Promissions函数或.NET TPL中的函数一样

让我们看一下Android的场景,我有两个服务端点:

  • 一个用于获取图像的URL
  • 一个用于获取图像本身
代码:

private void loadImage(最终图像视图){
可观察的stringObs=getImageUrlAsync();
stringObs.subscribe(新操作1(){
@凌驾
公共无效调用(字符串imageUrl){
//第一个异步操作完成
可观察的bitmapObs=getBitmapAsync(imageUrl);
订阅(新操作1(){
@凌驾
公共无效调用(位图图像){
//第二个异步操作完成
设置图像位图(图像);
}
});
}
});
}
我不希望将这两个操作嵌套在代码中,而是采用一种更像是按顺序执行的格式

我在RxJava/RxAndroid中找不到任何关于可观测的连续性的东西。有人能帮忙吗

我想你需要API

例如:

Observable.create(新建Observable.OnSubscribe()){
@凌驾
公用无效呼叫(用户)
private void loadImage(final ImageView imageView) {
    Observable<String> stringObs = getImageUrlAsync();
    stringObs.subscribe(new Action1<String> () {
        @Override
        public void call(String imageUrl) {
            // First async operation done
            Observable<Bitmap> bitmapObs = getBitmapAsync(imageUrl);
            bitmapObs.subscribe(new Action1<Bitmap>() {
                @Override
                public void call(Bitmap image) {
                    // second async operation done
                    imageView.setImageBitmap(image);
                }
            });
        }
    });
}
Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("imageUrl");
        }
    }).flatMap(new Func1<String, Observable<Bitmap>>() {
        @Override
        public Observable<Bitmap> call(String imageUrl) {
            return getBitmapAsync(imageUrl);
        }
    }).subscribe(new Action1<Bitmap>() {
        @Override
        public void call(Bitmap o) {
            imageView.setImageBitmap(image);
        }
    });