Estoy intentando descargar un mp3 externo en el almacenamiento interno. Sin embargo, los archivos que intento descargar son grandes, por lo que intento descargarlos en fragmentos de 1MB para que pueda comenzar a reproducirlos mientras se descarga el resto. Aquí está mi código de secuencia:InputStream no se cerrará, o tomará para siempre
InputStream is = null;
OutputStream os = null;
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
MyLog.d("Connection established");
byte[] buffer = new byte[8192];
is = new BufferedInputStream(response.getEntity().getContent(), buffer.length);
os = openFileOutput(filename, MODE_PRIVATE);
int size;
int totalSize = 0;
while ((size = is.read(buffer)) != -1 && totalSize < 1048576) {
os.write(buffer, 0, size);
totalSize += size;
}
MyLog.d("Finished downloading mix - " + totalSize + " bytes");
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
if (os != null) {
try {
os.flush();
os.close();
}
catch (IOException e) {
MyLog.e("Failed to close output stream.");
}
}
if (is != null) {
try {
is.close();
}
catch (IOException e) {
MyLog.e("Failed to close input stream.");
}
}
}
descarga el archivo bien, pero cuando se llega a is.close() en la sentencia finally, se cuelga. Si espero un realmente largo tiempo, eventualmente se cerrará. Parece que todavía está descargando el resto del archivo. ¿Cómo evito esto y cierro la transmisión de inmediato?
perfecto. ¡Gracias! –
Funcionó para mí también. Curiosamente, la mayoría de las implementaciones de Android no se cuelgan. Solo he visto esto en el Droid X2 hasta ahora. – dhaag23
en mi método de aborto DefaultHttpClient falta, pero mHttpClient.getConnectionManager(). Shutdown() funciona muy bien. – pvllnspk