我的活动需要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次尝试。
我正在考虑捕获异常,然后使用循环计数器。我可以用一些答案来实现这个。
有什么建议吗?
答案 0 :(得分:1)
要确认,您希望执行可能发生暂时故障的特定操作,在该操作成功时返回对象?
我之前使用过以下模式。
public class RetryUtil {
public static <T> tryAction(Callable<T> action, int maxTimes);
}
实现它,使得当函数成功时它返回Callable的结果,并在失败时再次尝试(使用你建议的循环)。
然后,您可以在匿名Callable中定义可重复的操作,并将其传递给tryAction。