【发布时间】:2018-04-03 17:27:34
【问题描述】:
我的问题是关于使用 RxJava for Android 来处理来自 Retrofit 调用的数据的可能性。
我刚刚开始使用这些库,所以如果我的问题很琐碎,请耐心等待。
这是我的场景。
我有一个从服务器返回的 json,看起来像这样
{ <--- ObjectResponse
higher_level: {
data: [
{
...
some fields,
some inner object: {
....
},
other fields
}, <----- obj 1
....,
{
....
}<---- obj n
]<-- array of SingleObjects
}
} <--- whole ObjectResponse
我已经改造得到这个响应并在 ObjectResponse 中解析。解析这个对象,我可以获得一个可以像往常一样传递给我的 RecyclerView 适配器的列表。
因此改造返回了 ObjectResponse,它是整个服务器答案的模型,并且在改造回调中我操纵 ObjectResponse 以提取我的列表,然后将其传递给我的适配器。
现在,我有这样的东西
Call<ObjectResponse> call = apiInterface.getMyWholeObject();
call.enqueue(new Callback<ObjectResponse>() {
@Override
public void onResponse(Call<ObjectResponse> call, Response<ObjectResponse> response) {
//various manipulation based on response.body() that in the ends
// lead to a List<SingleObject>
mView.sendToAdapter(listSingleObject)
}
@Override
public void onFailure(Call<ObjectResponse> call,
Throwable t) {
t.printStackTrace();
}
});
我的问题是:
有没有办法从改造中获得一个 Observable,最终可以引导我发出 SingleObject 列表(并操纵它),而不必像在改造回调中那样操纵 ObjectResponse?或者我应该坚持使用改造回调,并且只有在获得列表之后我才能使用 RxJava 操作,然后再将此列表提供给我的适配器?
我想要这样的东西
apiInterface
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<SingleObject>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Post> posts) {
mView.sendToAdapter(listSingleObject)
}
});
【问题讨论】:
标签: java android rx-java retrofit2 rx-android