У меня есть асинхронный метод, который позволяет загружать файлы. Если в середине загрузки я удаляю соединение (wifi или 3g), тайм-аут никогда не возникает.Как и почему не запускать «тайм-аут» на URLConnection (DownloadFile)?
Всегда оставаться в следующем цикле ждет возвращения соединения:
while ((count = input.read(data)) != -1) {
System.out.println("state 5");
total += count;
publishProgress((int) (total * 100/fileLength));
output.write(data, 0, count);
}
я:
private class DownloaderFile extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
...
try{
URLConnection connection = urlFinal.openConnection();
connection.setConnectTimeout(TIMEOUT_VALUE);
connection.setReadTimeout(TIMEOUT_VALUE);
connection.connect();
int fileLength = connection.getContentLength();
InputStream input = new BufferedInputStream(urlFinal.openStream());
OutputStream output = new FileOutputStream(folder + params[0]);
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
//always wait here
System.out.println("state 5");
total += count;
publishProgress((int) (total * 100/fileLength));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (SocketTimeoutException e) {
System.out.println("TIMEOUT!!! " + TIMEOUT_VALUE + " elapsed.");
callback.onDownloadEnd(DOWNLOAD_ERROR);
}
...
}
...
Этот вопрос был задан ранее, но не включает в себя немного о том, на Wi-Fi: http://stackoverflow.com/q/3163693/42962 Я рекомендую следуя советам на эту должность: http://stackoverflow.com/a/7611294/42962 Пожалуйста, позвоните getReadTimeout() и getConnectTimeout(), чтобы даже увидеть, будут ли объекты, которые вы пытаетесь установить, даже принимаются объектом. – hooknc