我在项目中使用Retrofit / OkHttp,最近我发现了RxJava。将它与Retrofit结合起来似乎既简单又直接,但在success(...)
中的Retrofit中使用常规异步回调,我们正在接收已解析的POJO和响应。这非常有用,在我的一些回调中,我正在使用这两个对象。我似乎无法用RxJava找到一种方法。
是否可以同时获取已解析的POJO和Response对象?
答案 0 :(得分:2)
RxJava的工作方式是onNext
方法总是只发出一个值,所以你不会得到类似的东西(因为它会违反合同):
onNext(T value, Response respone);
最接近的可能是Observable<ResponseAndPojo<T>>
,其中ResponseAndPojo
如下:
public class ResponseAndPojo<T> {
private final T value;
private final Response response;
public ResponseAndPojo(T value, Response response) {
this.value = value;
this.response = response;
}
// add getters here
}
这样的Observable随后会发出以下项目:
onNext(ResponseAndPojo<T> responseAndPojo)
您可以访问Response
和POJO。
现在,如何构建这样一个Observable:
一种方法是创建某种Subject(可能是BehaviorSubject,但对于单个请求它并不重要)然后在Retrofit success
方法中放回值Subject
。
所以,在某种你自己的RetrofitWrapper
类中你会有
public Observable<ResponseAndPojo<YourPojoClass>> getResponseAndPojoObservable() {
final BehaviorSubject<ResponseAndPojo<YourPojoClass>> retrofitSubject = BehaviorSubject.<ResponesAndPojo<YourPojoClass>>create();
yourRetrofitService.getSomething(new Callback<YourPojoClass>() {
@Override
public void success(YourPojoClass pojo, Response response) {
retrofitSubject.onNext(new ResponseAndPojo(pojo, response);
retrofitSubject.onCompleted();
}
});
return retrofitSubject;
}
正如您所看到的,Subject
从外部看起来像Observable<ResponseAndPojo<YourPojoClass>>
,这正是我们想要的。