對我來說,如果我們失去了連接(測試:關閉WiFi),則不使用超時。所以我寫了嘗試下載文件達X次,等待每間Ÿ毫秒的方法試試:
public static byte[] getByteArrayFromURL(String url, int maxTries, int intervalBetweenTries) throws IOException {
try {
return Utils.getByteArrayFromURL(url);
}
catch(FileNotFoundException e) { throw e; }
catch(IOException e) {
if(maxTries > 0) {
try {
Thread.sleep(intervalBetweenTries);
return getByteArrayFromURL(url, maxTries - 1, intervalBetweenTries);
}
catch (InterruptedException e1) {
return getByteArrayFromURL(url, maxTries -1, intervalBetweenTries);
}
}
else {
throw e;
}
}
}
下面是下載文件的方法,並拋出的UnknownHostException:
public static byte[] getByteArrayFromURL(String urlString) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream in = null;
try {
in = new URL(urlString).openStream();
byte[] byteChunk = new byte[BUFFER_SIZE];
int n;
while ((n = in.read(byteChunk)) > 0) {
out.write(byteChunk, 0, n);
}
}
finally {
if (in != null) {
try { in.close(); }
catch (IOException e) { e.printStackTrace(); }
}
}
return out.toByteArray();
}
現在,如果您要下載的文件不存在,該方法將立即失敗,否則如果拋出IOException(如UnknownHostException),它將重試,直到「maxTries」,在每次嘗試之間等待「intervalBetweenTries」 。
當然,你必須異步使用它。
請給出您的Web服務運行的IP地址,而不是域名。我也面臨同樣的問題。但我的web服務在本地運行在我的機器上。所以,當我給本地主機時,它會引發異常。但它接受我的IP地址。 – 2013-12-17 10:34:02