我使用了swiperefreshlayout android.support.v4.widget.SwipeRefreshLayout,并使用rxjava在每次滑动发生时向服务器查询。我的代码如下所示,我必须在OnRefreshListener中创建重复的observable和subscriber才能调用它们,由于代码重复,这看起来相当糟糕。如果我使用原始的(在外部声明),则永远不会返回订阅者(不会触发onNext、onError、onCompleted )。在这种情况下,RxJava遗漏了什么?
Subscriber<ListVerifyResponseWrapper> subscriber = new Subscriber<ListVerifyResponseWrapper>() {
@Override
public void onCompleted() {
LogUtils.LOGD(TAG, "completed");
}
@Override
public void onError(Throwable e) {
Toast.makeText(getActivity(), getString(R.string.An_error_has_occured), Toast.LENGTH_SHORT).show();
mSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onNext(ListVerifyResponseWrapper listVerifyResponseWrapper) {
changeViewStateAccordingToResult(listVerifyResponseWrapper);
}
};
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Observable<ListVerifyResponseWrapper> observableDuplicate = RestClient.getInstance().getRestApi().getListVerifyRequestDetail(model);
final Subscriber<ListVerifyResponseWrapper> subscriberDuplicate = new Subscriber<ListVerifyResponseWrapper>() {
@Override
public void onCompleted() {
LogUtils.LOGD(TAG, "completed");
}
@Override
public void onError(Throwable e) {
Toast.makeText(getActivity(), getString(R.string.An_error_has_occured), Toast.LENGTH_SHORT).show();
mSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onNext(ListVerifyResponseWrapper listVerifyResponseWrapper) {
changeViewStateAccordingToResult(listVerifyResponseWrapper);
}
};
observableDuplicate.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(subscriberDuplicate);
}
});
observable.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(subscriber);谢谢
发布于 2015-10-22 05:21:16
我也遇到了同样的问题。我通过链接解决了这个问题
.observeOn(AndroidSchedulers.mainThread())就在最后一个订阅者之前。显然,您必须确保有关UI的内容是在UI线程上完成的
发布于 2017-02-04 00:01:29
https://stackoverflow.com/questions/32644113
复制相似问题