正如Than所說,使用攔截器的解決方案并不是那么好.我已經設法用一個Rx變壓器來解決這個問題.我還添加了自定義api異常,當出現問題時我可以拋出它并在onError中輕松處理它.我認為它更強大.
響應包裝器:
public class ApiResponse {
private boolean success;
private T data;
private ApiError error;
}
成功為false時返回錯誤對象:
public class ApiError {
private int code;
}
成功為假時拋出此異常:
public class ApiException extends RuntimeException {
private final ApiError apiError;
private final transient ApiResponse> response;
public ApiException(ApiResponse> response) {
this.apiError = response.getError();
this.response = response;
}
public ApiError getApiError() {
return apiError;
}
public ApiResponse> getResponse() {
return response;
}
}
和一個變壓器:
protected Observable.Transformer,T> applySchedulersAndExtractData() {
return observable -> observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(tApiResponse -> {
if (!tApiResponse.isSuccess())
throw new ApiException(tApiResponse);
else
return tApiResponse.getData();
});
}