Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用反应式Android拉入刷新时添加更多订阅_Java_Android_Reactivex - Fatal编程技术网

Java 使用反应式Android拉入刷新时添加更多订阅

Java 使用反应式Android拉入刷新时添加更多订阅,java,android,reactivex,Java,Android,Reactivex,我编写了从服务器获取数据并显示到列表视图的代码。 我还添加了拉刷新功能。 我想知道我们是否在调用pull to refresh时添加了更多订阅,那么这是最佳做法还是应该在添加新订阅之前取消订阅 CompositeSubscription mSubscription = new CompositeSubscription(); private void pullToRefresh() { Subscription subscription = mMatchingApi.getRequest(n

我编写了从服务器获取数据并显示到列表视图的代码。 我还添加了拉刷新功能。 我想知道我们是否在调用pull to refresh时添加了更多订阅,那么这是最佳做法还是应该在添加新订阅之前取消订阅

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);
}