Java 使用反应式Android拉入刷新时添加更多订阅
我编写了从服务器获取数据并显示到列表视图的代码。 我还添加了拉刷新功能。 我想知道我们是否在调用pull to refresh时添加了更多订阅,那么这是最佳做法还是应该在添加新订阅之前取消订阅Java 使用反应式Android拉入刷新时添加更多订阅,java,android,reactivex,Java,Android,Reactivex,我编写了从服务器获取数据并显示到列表视图的代码。 我还添加了拉刷新功能。 我想知道我们是否在调用pull to refresh时添加了更多订阅,那么这是最佳做法还是应该在添加新订阅之前取消订阅 CompositeSubscription mSubscription = new CompositeSubscription(); private void pullToRefresh() { Subscription subscription = mMatchingApi.getRequest(n
CompositeSubscription mSubscription = new CompositeSubscription();
private void pullToRefresh() {
Subscription subscription = mMatchingApi.getRequest(new GetRequest(
new GetRequest.Builder().setRequestIds(orderIds)))
.subscribe(new Subscriber<GetRequestResponse>() {
//update list
}
});
mSubscription.add(subscription);
}
例如,如果我多次调用函数pullToRefresh()(两次或三次)。
例如:
因此,如果结果1尚未完成,结果2在结果1之前完成。那么列表的数据会显示错误吗?(显示结果1,但应显示结果2)
是否应在添加新订阅之前清除订阅1?使用单独的
SerialSubscription
仅保留最新的请求:
CompositeSubscription mSubscription = new CompositeSubscription();
SerialSubscription mPullRequest = new SerialSubscription();
{
mSubscription.add(mPullRequest); // Stop all requests if mSubscription is unsubscribed
}
private void pullToRefresh() {
/* same code as before */
mPullRequest.set(subscription);
}
使用单独的
SerialSubscription
仅使最新请求保持活动状态:
CompositeSubscription mSubscription = new CompositeSubscription();
SerialSubscription mPullRequest = new SerialSubscription();
{
mSubscription.add(mPullRequest); // Stop all requests if mSubscription is unsubscribed
}
private void pullToRefresh() {
/* same code as before */
mPullRequest.set(subscription);
}
关于第一次订阅,当加载数据并调用onComplete()方法时,此订阅将自动取消订阅 关于拉刷新,我不知道您是如何实现的,但例如Android RefreshLayout,禁用调用刷新回调,除非上一次刷新已经结束。也许你能做到
如果您确实希望有多个刷新事件,那么我建议您在创建新订阅之前取消订阅旧的刷新订阅(如果存在)。关于您的第一次订阅,当加载数据并调用onComplete()方法时,此订阅将自动取消订阅 关于拉刷新,我不知道您是如何实现的,但例如Android RefreshLayout,禁用调用刷新回调,除非上一次刷新已经结束。也许你能做到
如果您确实希望有多个刷新事件,那么我建议您在创建新订阅之前取消订阅旧的刷新订阅(如果存在)。是的,我知道我们可以在创建新订阅之前取消订阅旧的刷新订阅(如果存在)。但我认为它可以有另一种方式,一种更好的方式来处理这个案件。所以我想弄清楚。我认为更好的方法是不要重复刷新,因为第二个刷新请求与第一个刷新请求有多大的不同?因为它们相隔不到几秒钟-假设你的刷新请求需要几秒钟才能完成是的,我同意你的看法。是的,我知道如果旧的刷新订阅存在,我们可以在创建新订阅之前取消订阅。但我认为它可以有另一种方式,一种更好的方式来处理这个案件。所以我想弄清楚。我认为更好的方法是不要重复刷新,因为第二个刷新请求与第一个刷新请求有多大的不同?因为它们相隔不到几秒钟-假设你的刷新请求需要几秒钟才能完成是的,我同意你的看法。谢谢。我将尝试使用SerialSubscriptionAnk you。我将尝试使用SerialSubscription
CompositeSubscription mSubscription = new CompositeSubscription();
SerialSubscription mPullRequest = new SerialSubscription();
{
mSubscription.add(mPullRequest); // Stop all requests if mSubscription is unsubscribed
}
private void pullToRefresh() {
/* same code as before */
mPullRequest.set(subscription);
}