Android 在层中连接RxJava可观察对象
我的应用程序中有3层。Layer1订阅layer2中的“可观察”。Layer2订阅layer3,以便向layer1发送返回的数据 第1层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
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(数据);
}
}