我的应用中有3层。 Layer1从layer2订阅Observable。 Layer2订阅了layer3,以便将返回的数据发送到layer1。
层1
layer2.getData(data).subscribe(newData -> {Log.d("onNext", "returned");},
throwable -> {Log.d("onError", throwable.getMessage());});
假设layer3有一个名为downloadDataFromApi(data);
的方法public Observable<Data> getData(String data) {
return Observable.create(new Observable.OnSubscribe<Data>() {
@Override
public void call(Subscriber<? super Data> subscriber) {
Data data = new Data();
subscriber.onNext(data);
subscriber.onCompleted();
// Can't find a way to connect to layer3.
}
});
}
在layer2的getData()方法中我需要做什么?在将Observable返回到layer1之前,我基本上想要逻辑。
这有意义吗?
答案 0 :(得分:2)
直接返回Observable
。然后,layer1照常处理订阅。
class Layer2 {
public Observable<Data> getData(String data) {
return layer3.getData(data);
}
}
答案 1 :(得分:1)
从我看到你有3层(演示文稿,业务逻辑,数据访问)。
所以你可以做的是:
class PresentationLayer {
private BusinessLogicLayer layer;
PresentationLayer() {
layer = new BusinessLogicLayer();
}
public void showName() {
layer.getNameWithoutRxPrefix()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String name) throws Exception {
// show name somewhere
Log.d("PresentationLayer", "name: " + name);
}
});
}
}
class BusinessLogicLayer {
private DataAccessLayer layer;
BusinessLogicLayer() {
layer = new DataAccessLayer();
}
public Observable<String> getNameWithoutRxPrefix() {
return layer.getName()
.map(new Function<String, String>() {
@Override
public String apply(String name) throws Exception {
return name.replace("Rx", "");
}
});
}
}
class DataAccessLayer {
public Observable<String> getName() {
return Observable.just("RxAndroid");
}
}
如您所见,我在我的数据访问层(getName
)中返回一个Observable,并在我的业务逻辑方法(map
)中将另一个方法链接到它,然后将其返回到表示层