2016-05-12 48 views
0

rxJava中的新增功能我为了通过嵌套改造的Observables来获得Observable而挣扎。 关于代码块.map(userResponse -> { data.put final Intent resd = new Intent(); resd.putExtras(data); return (Intent)resd; });Retrofit RxJava嵌套可观测量的循环推理

我得到一个循环推理错误。 当我尝试编译我得到一个奇怪的消息,我有些不明白的:

Error:(52, 21) error: incompatible types: cannot infer type-variable(s) R (argument mismatch; bad return type in lambda expression Intent cannot be converted to Observable) where R,T are type-variables: R extends Object declared in method flatMap(Func1>) T extends Object declared in class Observable

这里是代码:

public Observable<Intent> createUser(final String email) { 
    Bundle data = new Bundle(); 
    return mWebservice.clientAuth("myFakeClientId") //returns an Observable<AccessToken> 
      .map(clientTokenObject -> { 
       String clientToken = clientTokenObject.accessToken; 
       Observable<Response<User>> userResponseObservable = mWebservice.createAccount(email); 
       Observable<Intent> resultObs = userResponseObservable 
           .map(userResponse -> { 
            final Intent resd = new Intent(); 
            resd.putExtras(data); 
            return (Intent)resd; 
           }); 
         return resultObs; 
        }); 
} 

;(

回答

3

你的映射是错了你。需要像

public Observable<Intent> createUser(final String email) { 

    return mWebservice.clientAuth("myFakeClientId") //returns an Observable<AccessToken> 
         .map(clientTokenObject -> clientTokenObject.accessToken) 
         .flatMap(accessToken -> { mWebservice.createAccount(email). 
                 .map(userResponse -> { 
                   final Intent resd = new Intent(); 
                   Bundle data = new Bundle(); 
                   resd.putExtras(data); 
                   return (Intent)resd; 
                  })}); 

}

+0

感谢您的回答,我发现了同样的事情(但它是偶然尝试的东西......)我真的没有区别map()和蚂蚁fatMap()(appart flattening stuff),谢谢你的回答 – gropapa

+0

大理石图帮助。检查[平面图文档中的图表](http://reactivex.io/documentation/operators/flatmap.html)。 – JohnWowUs