【发布时间】:2017-04-17 11:06:40
【问题描述】:
我在 zip 中组合了多个观察者以执行来自服务器的多个请求,但未执行 onNext,因此我无法获取返回的值。 menuName、restaurantName 和 userName 是全局变量。
public void getOrderValues(String restaurantIdx,String menuIdx,String userIdx ) {
try {
Observable<Restaurant> orderRestaurant = IdentityClient.getAPIService()
.getRestaurantById(restaurantIdx)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<Menu> orderMenu = IdentityClient.getAPIService()
.getMenuById(menuIdx)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<User> orderUser = IdentityClient.getAPIService()
.getUserById(userIdx)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable.zip(orderRestaurant, orderMenu, orderUser, new Function3<Restaurant, Menu, User, OrderValues>() {
@Override
public OrderValues apply(@NonNull Restaurant restaurant,@NonNull Menu menu,@NonNull User user) throws Exception {
return new OrderValues(restaurant, menu, user);
}
}).subscribe(new Observer<OrderValues>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("Eatright Error", d.toString()+"");
}
@Override
public void onNext(OrderValues orderValues) {
menuName = orderValues.menu.getName();
restaurantName = orderValues.restaurant.getName();
userName = orderValues.user.getUserName();
}
@Override
public void onError(Throwable e) {
Log.e("Eatright Error", e.getMessage()+"");
}
@Override
public void onComplete() {
Log.e("Eatright Error","Completed");
}
});
} catch (Exception e) {
Log.e("Error Eatright", e.getMessage()+"");
}
}}
//GET restaurant by Id
@GET("/api/restaurants/getrestaurant/{id}")
Observable<Restaurant> getRestaurantById(
@Path("id") String id);
//GET menu by Id
@GET("/api/menus/getmenu/{id}")
Observable<Menu> getMenuById(
@Path("id") String id);
@GET("/api/account/user/{id}")
Observable<User> getUserById( @Path("id") String id
);
当我将 observables 订阅给单个观察者时,我会在 onNext 上获得返回值,但在组合它们时不会。
邮递员的api测试
{
"RestaurantId": "00000000-0000-0000-0000-000000000000",
"Name": "Papaye",
"City": null,
"Town": null,
"Description": null,
"Image": null,
"DateCreated": null,
"Contact1": null,
"Contact2": null,
"NumOfSeats": null
}
{
"MenuId": "00000000-0000-0000-0000-000000000000",
"RestaurantId": null,
"Name": "Fufu and Light Soup",
"Price": null,
"MainImage": null,
"LastModified": null,
"DateCreated": null,
"Type": null
}
{
"userName": "buelersandra@gmail.com"
}
【问题讨论】:
-
你能展示一下
getRestaurantById(或getMenuById,getUserById)的实现吗? -
已编辑帖子 GVillani82
-
阅读:stackoverflow.com/a/42455515/3903847 如果不请求订阅者中的项目,您将无法获得 onNext,或者使用@GVillani82 指出的其他重载
-
如果将 3 个输入替换为
Observable.just()的模拟源,每个都返回一些默认值,它会起作用吗?
标签: android rx-android rx-java2 reactivex