Android 如何为异步响应创建可观察的?

Android 如何为异步响应创建可观察的?,android,rx-java,rx-java2,Android,Rx Java,Rx Java2,我有一个异步方法,如下所示: void getPlaceInfo(Place place, PlaceCallback callback) 例如,myPlaceCallback有一种方法: void success(InfoPlace place); 我想为两个请求的等待响应创建可观察的: getPlaceInfo(...); // first call getPlaceInfo(...); // second call 然后我想同时得到两个响应 我能来吗 使用Observable.fro

我有一个异步方法,如下所示:

void getPlaceInfo(Place place, PlaceCallback callback)
例如,my
PlaceCallback
有一种方法:

void success(InfoPlace place);
我想为两个请求的等待响应创建
可观察的

getPlaceInfo(...); // first call
getPlaceInfo(...); // second call
然后我想同时得到两个响应


我能来吗

使用
Observable.fromEmitter()
包装异步调用,然后可以使用
Observable.zip()
组合调用。

使用
Observable.fromEmitter()
包装异步调用,然后可以使用
Observable.zip()
组合调用。

因此,您需要组合两个回调来评估函数,如:

响应计算机响应(InfoPlace InfoPlace、InfoPlace infoPlace2){ ... }
你想用Rx来做这个。这里有两个问题;将回调方法包装到Observable中,并将它们组合起来

您不能只是实例化一个可观察对象并调用myObservable.send(值)或myObservable.next(值)。第一个解决方案是使用一个。另一个解决方案(如下)是使用observable.create()创建observable。调用回调方法并在方法Observable.create()内创建侦听器,因为它在Observable.create()内,您可以调用onSuccess()方法,该方法告诉Observable传递一个值:

Single GetInfoPlaceSSingle(地点){
返回Single.create(e->getPlaceInfo(place,newplacecallback()){
@凌驾
公共作废成功(InfoPlace InfoPlace){
e、 onSuccess(infoPlace);
}
}));
}
或使用Java 8:

Single GetInfoPlaceSSingle(地点){
返回Single.create(e->getPlaceInfo(place,e::onSuccess));
}
注意,我使用了over Observable,因为您只等待一个值。兴趣对于你的功能来说是一个更具表现力的契约

把事情包装成可观察的是一件痛苦的事,但现在你处于被动的领域,Rx为你提供了一个完整的工具箱来处理它们。第二部分——结合观测值——很简单:

Single.zip(getInfoPlaceSsingle(place1),getInfoPlaceSsingle(place2),this::ComputerResponse);

因此,您需要组合两个回调来评估函数,如:

响应计算机响应(InfoPlace InfoPlace、InfoPlace infoPlace2){ ... }
你想用Rx来做这个。这里有两个问题;将回调方法包装到Observable中,并将它们组合起来

您不能只是实例化一个可观察对象并调用myObservable.send(值)或myObservable.next(值)。第一个解决方案是使用一个。另一个解决方案(如下)是使用observable.create()创建observable。调用回调方法并在方法Observable.create()内创建侦听器,因为它在Observable.create()内,您可以调用onSuccess()方法,该方法告诉Observable传递一个值:

Single GetInfoPlaceSSingle(地点){
返回Single.create(e->getPlaceInfo(place,newplacecallback()){
@凌驾
公共作废成功(InfoPlace InfoPlace){
e、 onSuccess(infoPlace);
}
}));
}
或使用Java 8:

Single GetInfoPlaceSSingle(地点){
返回Single.create(e->getPlaceInfo(place,e::onSuccess));
}
注意,我使用了over Observable,因为您只等待一个值。兴趣对于你的功能来说是一个更具表现力的契约

将事物包装成可观察的东西是一种痛苦,但现在你处于反应领域,Rx为您提供了一个完整的工具箱来处理它们。第二部分——结合观测值——很简单:

Single.zip(getInfoPlaceSsingle(place1),getInfoPlaceSsingle(place2),this::ComputerResponse);

另一种稍微不那么干净的方法是用
可观察的方式包装。create()
另一种稍微不那么干净的方法是用
可观察的方式包装。create()
您是否尝试过使用Singleton类,该类将是可观察的,并在该Singleton上设置订阅者列表,并在第一次和第二次调用完成时发出通知。如果您需要一些我可以为您编写的代码片段,您是否尝试过使用Singleton类,该类将是可观察的,并在该Singleton上设置订户列表,并在第一次和第二次调用完成时发出通知。如果您需要一些代码片段,我可以为您编写