捕获SocketTimeOut错误并响应

时间:2011-09-22 03:13:05

标签: java android

我的活动需要jsoup才能连接到网址。

问题是我一次又一次地得到

09-21 23:11:56.140: WARN/System.err(5725): java.net.SocketTimeoutException: Connection timed out
09-21 23:11:56.140: WARN/System.err(5725):     at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
9-21 23:11:56.140: WARN/System.err(5725):     at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:369)
09-21 23:11:56.140: WARN/System.err(5725):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:208)
09-21 23:11:56.140: WARN/System.err(5725):     at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:431)
09-21 23:11:56.140: WARN/System.err(5725):     at java.net.Socket.connect(Socket.java:901)
09-21 23:11:56.140: WARN/System.err(5725):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:75)
09-21 23:11:56.140: WARN/System.err(5725):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)

我想找到一种方法,当这种情况发生时继续尝试,直到让我们说3次尝试。

我正在考虑捕获异常,然后使用循环计数器。我可以用一些答案来实现这个。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

要确认,您希望执行可能发生暂时故障的特定操作,在该操作成功时返回对象?

我之前使用过以下模式。

public class RetryUtil {
    public static <T> tryAction(Callable<T> action, int maxTimes);
}

实现它,使得当函数成功时它返回Callable的结果,并在失败时再次尝试(使用你建议的循环)。

然后,您可以在匿名Callable中定义可重复的操作,并将其传递给tryAction。