1

我正在用 Spring 构建一个 REST 应用程序。我正在以 POJO 方式进行操作。现在我想处理一个耗时太长的 GET 请求(可以说是因为用户的连接非常糟糕)。我可以做些什么来处理这个(在春天),也许通过在 5000 毫秒后取消请求?

我的方法:
所以我想需要某种超时。在我的 google-tour 中,我发现有一个 HttpComponentsClientHttpRequestFactory 和一个所谓的 setConnectTimeout() 函数。我对此进行了测试,但我无法处理抛出的异常,因为它“深入内部”并且它作为 AsyncTask 的致命异常传递出去。所以我失败了。

最佳做法是什么?任何的想法?

编辑:设置了弹簧,所以请只使用弹簧解决方案。

编辑:根据我的研究,这是不可能的。甚至@Spring 论坛也没有答案:http: //forum.springsource.org/showthread.php?135656-How-can-I-handle-GET-requests-that-are-taking-to-long

4

2 回答 2

2

首先,不要使用 AsyncTask 来执行网络请求,因为如果您更改设备的方向,Activity 将被销毁并在重新创建后,但 AsyncTask 保留对已销毁 Activity 的引用并导致一些内存泄漏。

请改用服务。我建议你使用RoboSpice。这是一个使用 POJO 和 Spring 轻松发出 REST 请求的库。

如果您对自动本地和远程数据持久性管理感兴趣,您可以使用RestDroid来处理它(也可以使用 POJO)。

这两个库都使用 RequestListeners 来管理您正在谈论的案例。当您的请求失败时,会通知 UI。

于 2013-03-18T11:03:23.527 回答
0

为什么不采取更简单的方法,试试这段代码,你会得到一个更明确的异常:

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
HttpConnectionParams.setSoTimeout(httpParameters, 10000);

HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet request = new HttpGet(url);

HttpResponse response = client.execute(request);
于 2013-03-13T22:00:18.120 回答