【发布时间】:2017-03-26 16:19:00
【问题描述】:
我正在使用这些版本;
compile "com.squareup.retrofit2:retrofit:2.2.0"
compile "com.squareup.retrofit2:converter-gson:2.2.0"
compile "com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0"
compile "io.reactivex.rxjava2:rxjava:2.0.6"
compile "io.reactivex.rxjava2:rxandroid:2.0.1"
ApiService
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface ApiService {
@POST("authenticate")
Observable<SignInResponse> auth(@Body SignInRequest request);
@POST("user/signUp")
Observable<SignUpResponse> signUp(@Body SignUpRequest request);
@POST("restricted/event/addEvent")
Observable<NewEventResponse> createEvent(@Body NewEventRequest request);
}
ApiClient
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import io.reactivex.Observable;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ApiClient {
private static ApiClient apiClient;
private final ApiService apiService;
public static ApiClient getInstance() {
if (apiClient == null)
apiClient = new ApiClient();
return apiClient;
}
private ApiClient() {
OkHttpClient client = new OkHttpClient.Builder()
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
apiService = retrofit.create(ApiService.class);
}
public Observable<SignInResponse> authenticate(SignInRequest request) {
return apiService.auth(request);
}
public Observable<SignUpResponse> signUp(SignUpRequest request) {
return apiService.signUp(request);
}
public Observable<NewEventResponse> createEvent(NewEventRequest request) {
return apiService.createEvent(request);
}
}
SignInPresenter
import com.okarakose.commons.mvp.presenter.BasePresenter;
import hugo.weaving.DebugLog;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
public class SignInPresenter extends BasePresenter<SignInView> {
private final DataManager dataManager;
private final CompositeDisposable disposables;
public SignInPresenter() {
dataManager = DataManager.getInstance();
disposables = new CompositeDisposable();
}
public void signIn(String mailAddress, String password) {
getMvpView().showProgress();
mailAddress = mailAddress.trim();
password = password.trim();
SignInRequest signInRequest = new SignInRequest.Builder(mailAddress, password)
.build();
disposables.add(ApiClient.getInstance().authenticate(signInRequest)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(response -> {
getMvpView().hideProgress();
if (response.success == 1) {
dataManager.getPreferencesHelper().putToken(response.token);
dataManager.getPreferencesHelper().putUser(response.data);
getMvpView().loginSuccess();
} else {
getMvpView().loginFailed(response.messages.get(0));
dataManager.getPreferencesHelper().clearUser();
}
}, throwable -> {
throwable.printStackTrace();
getMvpView().hideProgress();
}));
}
}
Retrofit2 CHANGELOG https://github.com/square/retrofit/blob/master/CHANGELOG.md
RxJava 2.x 现在支持第一方“adapter-rxjava2”工件。
我的问题是:如何获得类似 Retrofit ResponseBody 类的 Http 响应代码?
另一个问题是:我们如何集中rest api响应?例如如果api返回http响应代码401,则抛出AuthenticationException或成功标志返回0,然后抛出GenericException。
【问题讨论】:
-
请将@Kiskae 回复标记为正确,或者如果您需要了解其他信息,请告诉我们。
标签: android retrofit2 rx-android rx-java2