Android 在层中连接RxJava可观察对象

Android 在层中连接RxJava可观察对象,android,rx-java,rx-android,Android,Rx Java,Rx Android,我的应用程序中有3层。Layer1订阅layer2中的“可观察”。Layer2订阅layer3,以便向layer1发送返回的数据 第1层 layer2.getData(data).subscribe(newData -> {Log.d("onNext", "returned");}, throwable -> {Log.d("onError", throwable.getMessage());}); 假设第3层有一个名为downloadDat

我的应用程序中有3层。Layer1订阅layer2中的“可观察”。Layer2订阅layer3,以便向layer1发送返回的数据

第1层

layer2.getData(data).subscribe(newData -> {Log.d("onNext", "returned");},
                    throwable -> {Log.d("onError", throwable.getMessage());});
假设第3层有一个名为downloadDataFromApi(data)的方法

公共可观察的getData(字符串数据){
返回Observable.create(newobservable.OnSubscribe(){
@凌驾

public void call(订户据我所知,您有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");
    }
}
class PresentationLayer{
私有业务逻辑层;
表示层(){
层=新的BusinessLogicLayer();
}
public void showName(){
layer.getNameWithoutRxPrefix()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新消费者){
@凌驾
public void accept(字符串名称)引发异常{
//在某处显示姓名
Log.d(“PresentationLayer”,“name:”+name);
}
});
}
}
类业务逻辑层{
私有数据访问层;
BusinessLogicLayer(){
层=新的DataAccessLayer();
}
不带Rxprefix()的公共可观察GetName{
返回layer.getName()
.map(新函数(){
@凌驾
公共字符串应用(字符串名称)引发异常{
返回名称。替换(“Rx”,“Rx”);
}
});
}
}
类DataAccessLayer{
公共可观察的getName(){
可观察的返回。just(“RxAndroid”);
}
}

如您所见,我在我的数据访问层(
getName
)中返回一个可观察对象,并在返回到表示层之前在我的业务逻辑方法(
map
)中将另一个方法链接到它。

据我所见,您有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");
    }
}
class PresentationLayer{
私有业务逻辑层;
表示层(){
层=新的BusinessLogicLayer();
}
public void showName(){
layer.getNameWithoutRxPrefix()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新消费者){
@凌驾
public void accept(字符串名称)引发异常{
//在某处显示姓名
Log.d(“PresentationLayer”,“name:”+name);
}
});
}
}
类业务逻辑层{
私有数据访问层;
BusinessLogicLayer(){
层=新的DataAccessLayer();
}
不带Rxprefix()的公共可观察GetName{
返回layer.getName()
.map(新函数(){
@凌驾
公共字符串应用(字符串名称)引发异常{
返回名称。替换(“Rx”,“Rx”);
}
});
}
}
类DataAccessLayer{
公共可观察的getName(){
可观察的返回。just(“RxAndroid”);
}
}

如您所见,我在数据访问层(
getName
)中返回一个可观察的对象,并在返回到表示层之前在我的业务逻辑方法(
map
)中将另一个方法链接到该对象。

只需直接返回
可观察的对象即可。然后,第1层照常处理订阅

class Layer2 {
    public Observable<Data> getData(String data) {
        return layer3.getData(data);
    }
}
类层2{
公共可观察的getData(字符串数据){
返回layer3.getData(数据);
}
}

直接返回可观察的
即可。然后第1层照常处理订阅

class Layer2 {
    public Observable<Data> getData(String data) {
        return layer3.getData(data);
    }
}
类层2{
公共可观察的getData(字符串数据){
返回layer3.getData(数据);
}
}