2015-07-09 110 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