2014-02-13 54 views
2

我正在使用Robospice。我想编写一些可重用的代码,以便在当前活动的待处理网络请求清除后立即停止ProgressBars和ProgressDialog。但是,我遇到了一些问题。待处理的请求完成后,我该如何询问Robospice?

我正在监视什么时候请求已完成,通过检查自定义SpiceServiceListener来调用在每个活动中实现的自定义回调。在onRequestAdded()期间,我显示了任何Progress UI元素。在onRequestSucceeded(),onRequestFailed()和onRequestCancelled()期间,我检查getSpiceManager()。getPendingRequestCount()以查看它是否为零,然后隐藏任何Progress UI元素。

在我的应用程序中挂起的请求计数永远不会达到零(至少在这三个方法中),但似乎停止在一个。即使我可以从Retrofit日志中看到我的请求看起来都已完成,情况也是如此。

待处理请求计数是全局还是特定于当前活动及其spice管理器实例?是否有更好的方法来观察当前活动中完成的所有请求?

回答

1

我有一个答案。我错过了仪表onRequestProcessed(),所以挂起网络请求的数量从未达到零。挂起的请求计数现在确实达到零。

我仍然不知道计数是全局还是本地的当前活动及其SpiceManager实例,但我从我的新代码中获得有用的结果。

+0

它是SpiceManager实例的本地实例。 – rciovati

+0

谢谢,这很有用。这意味着我可以只检查当前活动及其直接上下文的待处理请求。 – colintheshots

+0

快速跟进......我可以看到SpiceManager将请求数据存储为Collections.SynchronizedMap,并执行size()调用以获取挂起请求计数。但是,我可以清楚地看到当前的请求被计为待处理。即使调用函数已同步,两个请求回调也可能在两个请求正在处理时调用getPendingRequestCount()。因此,由于竞争条件,我发现这两个函数可能会返回两个未决请求。有什么方法可以明确知道SpiceManager在没有竞争条件的情况下完成? – colintheshots