有没有办法可以在下面的代码中从 userObservable 返回用户列表。基本上如何读取 Observable 的对象值。
public List<User> getUserList(){
Observable<Map<String, Object>> userDetailsObservable = getUserDetails(...);
Observable<Map<String, Object>> userLikesObservable = getUserLikes(...);
Observable<List<User>> userObservable = Observable.zip(userDetailsObservable,
userLikesObservable, new Func2<Map<String, Object>, Map<String, Object>, List<User>>() {
public List<User> call(Map<String, Object> value1, Map<String, Object> value2) {
List<User> userList = new ArrayList<User>();
//Iterating both maps and composing user list here.
return userList;
}
});
userObservable.subscribe(new Subscriber<List<User>>() {
@Override
public void onNext(List<User> userList) {
System.out.println("Merged values " + userList);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
// Throws ClassCastException which is expected... How do I get the user list from userObservable
List<User> userList = List<User> userObservable;
return userList; //Fetch the user list from userObservable and return
}
最佳答案
您需要订阅 userObservable
.然后,您将获得数据可用时发出的用户列表。
userObservable
.subscribe(users -> {
for (User user : users) {
// Do what you want with user.
}
});
编辑:要返回列表,您需要使用
toBlocking()
称呼。然后你可以使用 Blocking Observable Operators 之一以获得想要的效果。最有可能 first()
或 single()
会为你工作。return userObservable
.toBlocking()
.first();
关于rx-java - 从 Observable 读取对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329600/