Robospice。按需重试失败的请求

时间:2014-09-10 16:13:40

标签: android request robospice

我需要实现非常流行的应用行为模板 - 为用户提供重试失败请求的机会。现在我用SpiceServiceListener捕获失败的请求,并显示用户可以按“重试”按钮的对话框。不幸的是,使用与SpiceManager.execute()相同的CachedSpiceRequest对象不会产生所需的行为,因为如果请求不成功,RS会从mapRequestToLaunchToRequestListener删除所有请求侦听器。因此请求可以正常工作,但它不会向我的Activity返回任何信息。

有没有简单的方法(不修改库代码)来实现它?

1 个答案:

答案 0 :(得分:0)

不幸的是,看起来像这样的情况没有抽象的解决方案,所以我不得不在每个请求中添加这样的代码。

    getSpiceManager().execute(r, new RequestListener<CountProfiles>() {
        @Override
        public void onRequestFailure(SpiceException spiceException) {
            if (act.getSupportFragmentManager().findFragmentByTag("network_problem") == null) {
                NetworkProblemDialogFragm.newInstance(r, this).show(act.getSupportFragmentManager(), "network_problem");
            } else {
                ((NetworkProblemDialogFragm) act.getSupportFragmentManager().findFragmentByTag("network_problem")).setSpiceRequest(r);
                ((NetworkProblemDialogFragm) act.getSupportFragmentManager().findFragmentByTag("network_problem")).setRequestListener(this);
            }
        }

        @Override
        public void onRequestSuccess(CountProfiles countProfiles) {
        }
    });

NetworkProblemDialogFragm是一个带有重试按钮的DialogFragment,点击此按钮后,我使用给定的RequestListener重新执行失败的请求。

不是很漂亮的解决方案,但看起来没有更好的解决方案。