2014-11-24 63 views
0

所以我有一个异步操作A取决于第二个,B。如何使B成为A的延续,就像您在.NET TPL中使用then函数的函数或ContinueWith一样?如何使用RxJava Observables进行延续?

让我们从Android上scenarion在那里我有两个服务端点:

  • 一个用于提取网址的图像
  • 一个用于读取图像本身

代码:

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); 
       } 
      }); 
     } 
    }); 
} 

我想不是使这两个操作以代码方式嵌套,但按照更像它的格式进行操作。

我一直无法找到有关RxJava/RxAndroid中Observable的延续。任何人都可以帮忙吗?

回答

11

我想你需要API flatMap

如:

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); 
     } 
    });