【问题标题】:cyclic inference in Retrofit RxJava nested observablesRetrofit RxJava 嵌套可观察对象中的循环推理
【发布时间】:2016-05-12 13:34:50
【问题描述】:

rxJava 中的新功能我正在努力通过嵌套改造 Observables 来获得 Observable。 关于代码块.map(userResponse -> { data.put final Intent resd = new Intent(); resd.putExtras(data); return (Intent)resd; });

我得到一个循环推理错误。 当我尝试编译时,我收到一条奇怪的消息,我不太理解:

错误:(52, 21) 错误:不兼容的类型:无法推断类型变量 R (参数不匹配;lambda 表达式中的返回类型错误 Intent 不能转换为 Observable) 其中 R,T 是类型变量: R 扩展了方法 flatMap(Func1>) 中声明的对象 T 扩展了 Observable 类中声明的 Object

代码如下:

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;
                    });
}

;(

【问题讨论】:

    标签: rx-java retrofit2 rx-android


    【解决方案1】:

    您的映射错误。你需要类似的东西

    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;
                                                                })});
    

    }

    【讨论】:

    • 感谢您的回答,我发现了同样的事情(但这是偶然尝试的事情......)我真的不明白 map() ant fatMap() 之间的区别(appart扁平化的东西),谢谢你的回答
    • 大理石图帮助。检查diagram in the documentation for flatmap
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2020-08-28
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多