2015-07-09 92 views
3

有没有一种方法可以在下面的代码中从userObservable返回用户列表。基本上如何读取Observable的对象值。从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 
} 
+0

把格式化您的文章多一秒plz –

+0

@Sleiman在我的文章中缺少什么格式?另外我还没有把很多代码格式化。我正在寻求一些帮助。只要它可以理解就没问题。所以对我的问题的任何帮助非常感谢。 – PPK

+1

没有你的问题不清楚,为什么你没有得到任何答案。你必须尊重花时间阅读这些内容的人。 –

回答

8

您需要订阅userObservable。然后,您将获得数据可用时发出的用户列表。

userObservable 
    .subscribe(users -> { 
     for (User user : users) { 
      // Do what you want with user. 
     } 
    }); 

编辑:为了回报你将需要使用一个toBlocking()通话清单。然后,您可以使用Blocking Observable Operators之一来获得所需的效果。最有可能的first()single()将为你工作。

return userObservable 
    .toBlocking() 
    .first(); 
+0

kjones,谢谢你的帮助。有没有一种方法可以从订阅中返回用户列表。如果你想知道我为什么这样做。我有一个场景,我使用2个observable和2个使用userObservable合并响应进行2个异步rest API调用。所以最后我想从我的方法返回的用户列表。 – PPK

+0

@PPK - 我已经更新了答案,将会做你正在寻找的东西。 – kjones

+0

谢谢。您的解决方案奏效 – PPK