調試器,這可能會有幫助。
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);
感謝弗拉基米爾!但這是無關緊要的,我只是想知道如何將響應觀測值的可觀測量轉換爲響應觀測值。請看我的括號。 – JehandadK
@DeBuGGeR,在您的代碼中指明您想要接收的Observable,並獲得它。您也可以將上面代碼中的'AuthBean'更改爲您自己的響應模型。 –
我已經提到過它。 ObservableObservableRequest正在返回,但我想要返回ObservableRequest – JehandadK