我正在使用 RxAndroid,由于两个可观察结果,我想执行一个改造请求。所以我使用 zip 运算符
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);
最佳答案
调试,这可能有帮助。
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
是接口(interface),可能包含如下内容:
@FormUrlEncoded
@POST("/auth")
Observable<AuthBean>
postAuth(@Field("login") String login,
@Field("password") String password);
关于java - 使用 RxJava 进行改造时处理额外的 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35256833/