2016-05-12 8 views
0

Neu in rxJava Ich kämpfe, um eine Observable durch Verschachtelung Retrofit Observables zu bekommen. Auf dem Codeblock .map(userResponse -> { data.put final Intent resd = new Intent(); resd.putExtras(data); return (Intent)resd; });zyklische Inferenz in Retrofit RxJava verschachtelte Observablen

Ich bekomme einen zyklischen Inferenzfehler. Wenn ich versuche zu kompilieren ich eine seltsame Nachricht erhalte ich verstehe nicht ganz, wie:

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

hier ist der Code:.

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

; (

Antwort

3

Ihre Zuordnung nicht stimmt Sie brauchen so etwas wie

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

Danke für deine Antwort, ich fand das gleiche heraus (aber es war zufällig Dinge zu versuchen ...) Ich verstehe wirklich nicht den Unterschied zwischen map() ant fatMap() (appart die abflachenden Sachen), danke für Ihre Antwort – gropapa

+0

Marble Diagramme helfen. Überprüfen Sie das [Diagramm in der Flatmap-Dokumentation] (http://reactivex.io/documentation/operators/flatmap.html). – JohnWowUs