2017-02-02 5 views
3

を返す私は、私はUSERIDは含まれているアカウントを取得するためのAPI呼び出しを行うためにメソッドを定義したいと思います次のインターフェイスは、レトロフィットと連続したAPI呼び出しを行うと、観察

public interface ApiService { 

    @GET("https://stackoverflow.com/users/me") 
    Observable<Account> authenticateUser(@Header("Authorization") String auth); 

    @GET("/membership/{userId}") 
    SubscriptionStatus getSubscriptionStatus(@Path("userId") String userId); 
} 

が含まれているレトロフィットサービスを持っていますこのIDを使用して2番目のAPIコールを作成し、ユーザーのサブスクリプションステータスを取得します。 SubscriptionStatusにはブール値が含まれていますが、trueの場合はメソッドがObservableを返すようにします。

これは私がこれまでのところ、それについて行っている方法です。)程度

return service.authenticateuser(base64) // gets Account observable 
    .doOnNext(account -> { 
     currentAccount = account; // setting the Account Variable 
    }) 
    .flatMap(account -> 
     service.getSubscriptionStatus(account.getUserId()) 
     .filter(status -> status.isActive()) // don't let status pass if not active 
     .map(status -> account) // we actually need the original account 
    ); 

場合は、アカウントやステータス、最後のマップ(両方を必要とするどのよう

public Observable<Account> doLogin(ApiService service , String credentials) { 

return service.authenticateuser(base64) // gets Account observable 
     .doOnNext(account -> { 
      currentAccount = account; // setting the Account Variable 
     }) 
     .flatMap(account -> service.getSubscriptionStatus(account.getUserId())) // get Account Subscription status 

     ... //unsure where to go from here I need to check 
      //the subscriptionStatus object and return account   
      //observable if condition is valid 
} 

答えて

6

一部を返す必要があります2のcomposite type:これは働いていたたくさん

.map(status -> new Pair<>(account, status)) 
+0

おかげで、私は、各API呼び出しのエラーを処理して返すことができる方法を知っていますか? –

関連する問題