2016-02-07 6 views
0

Я использую RxAndroid, и в результате двух наблюдаемых я хочу выполнить запрос на модификацию. Поэтому я использую почтовый операторОбращение с дополнительными наблюдаемыми при использовании RxJava с модификацией

Observable<RequestBuilder> obs = a.zipWith(b, (lhs, rhs) -> builder.b(rhs).a(lhs)); 

Теперь проблема в том, что builder.build() возвращают другой наблюдаемой ObservableRequest, но этот метод в настоящее время делает его ObservableObservableRequest, который я не могу показаться, чтобы выяснить. Я уже сделал это, но я хочу сделать это правильно ...

obs.map(
(builder) -> builder.build(api) 
.subscribeOn(Schedulers.newThread()) 
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe(this::setData) 
); 

Может быть что-то вроде

obs.map((builder) -> builder.build(api)) 
.subscribeOn(Schedulers.newThread()) 
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe(this::setData); 

ответ

1

отладчика, это может помочь.

login метод RestPresenter класса

public void login(String email, String password) { 
     mRestService.getApi() 
       .postAuth(email, password, "") //create Observable 
       .timeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS) //time out 
       .retry(RETRY_COUNT_FOR_REQUEST) //times to retry 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Observer<AuthBean>() { // your model 
        @Override 
        public void onCompleted() { 
         // do nothing 
        } 

        @Override 
        public void onError(Throwable e) { 
         mView.showError("Error"); 
        } 

        @Override 
        public void onNext(AuthBean posts) { 
         mView.workWithLoginResponse(posts); 
        } 
       }); 
} 

Вызов его в классе activity

RestService mRestService = new RestService(); 
mRestPresenter = new RestPresenter(YourActivity.this, mRestService); 
mRestPresenter.login(email, password); 

RestService может выглядеть следующим образом

public class RestService { 
    private ProviderApi mProviderApi; 
    private long CONNECTION_TIMEOUT_IN_SECONDS = 15L; 
    private long READ_TIMEOUT_IN_SECONDS  = 15L; 
    private long WRITE_TIMEOUT_IN_SECONDS  = 25L; 

    public RestService() { 
     RequestInterceptor requestInterceptor = new RequestInterceptor() { 
      @Override 
      public void intercept(RequestFacade request) { 
       request.addHeader("Accept", "application/json"); 
      } 
     }; 
     RestAdapter restAdapter = new RestAdapter.Builder() 
       .setEndpoint(Config.URL_SERVER) 
       .setRequestInterceptor(requestInterceptor) 
       .setLogLevel(RestAdapter.LogLevel.FULL) 
       .setClient(new OkClient(getClient())) // need square/okhttp 
       .build(); 
     mProviderApi = restAdapter.create(ProviderApi.class); 
    } 

    private OkHttpClient getClient() { 
     OkHttpClient client = new OkHttpClient(); 
     client.setConnectTimeout(CONNECTION_TIMEOUT_IN_SECONDS, TimeUnit.MINUTES); 
     client.setReadTimeout(READ_TIMEOUT_IN_SECONDS, TimeUnit.MINUTES); 
     client.setWriteTimeout(WRITE_TIMEOUT_IN_SECONDS, TimeUnit.MINUTES); 
     return client; 
    } 

    public ProviderApi getApi() { 
     return mProviderApi; 
    } 
} 

mView Ваш activity, поэтому вы просто создаете метод workWithLoginResponse и делаете то, что хотите, с ответом сервера.

ProviderApi Также есть интерфейс и может есть что-то вроде этого:

@FormUrlEncoded 
@POST("/auth") 
Observable<AuthBean> 
postAuth(@Field("login") String login, 
     @Field("password") String password); 
+0

Спасибо, Владимир! Но это не имеет значения, я просто хочу знать, как преобразовать Observable of Observable of Response to Observable of Response. Пожалуйста, взгляните на мои скобки. – JehandadK

+0

@DeBuGGeR, укажите в своем коде, что Наблюдаемый вы хотите получить, и получите его. вы также можете изменить «AuthBean» в приведенном выше коде на свою собственную модель ответа. –

+0

Я уже это сделал. ObservableObservableRequest возвращается, но я хочу вернуть ObservableRequest – JehandadK

0

ObservableObservableRequest возвращается, но я хочу ObservableRequest быть возвращены

Как насчет flatMap?

//create Observable<Observable<Integer>> 
Observable.just(Observable.just(1, 2, 3)) 
     //convert to Observable<Integer> 
     .flatMap(integerObservable -> integerObservable) 
     //receive Integer values 
     .subscribe(integer -> { 
      //do something with Integer 
     }); 

More about flatMap

Смежные вопросы