Tôi đang cố gắng tải xuống một mp3 bên ngoài vào bộ nhớ trong. Tuy nhiên, các tập tin tôi đang cố gắng tải xuống là lớn, vì vậy tôi đang cố gắng tải chúng xuống theo khối 1MB để bạn có thể bắt đầu phát chúng trong khi phần còn lại được tải xuống. Dưới đây là mã luồng của tôi:InputStream sẽ không đóng, hoặc mất mãi mãi đến
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.");
}
}
}
Nó tải tệp tin tốt, nhưng khi nó đến được.close() trong tuyên bố cuối cùng, nó bị treo. Nếu tôi đợi thực sự thời gian dài nó sẽ đóng lại. Có vẻ như nó vẫn tải xuống phần còn lại của tệp. Làm cách nào để tránh điều này và đóng luồng ngay lập tức?
Hoàn hảo. Cảm ơn! –
Làm việc cho tôi. Thật kỳ lạ, phần lớn việc triển khai Android không treo. Tôi đã chỉ nhìn thấy điều này trên Droid X2 cho đến nay. – dhaag23
trong phương thức Abort mặc định của tôi bị thiếu, nhưng mHttpClient.getConnectionManager(). Shutdown() hoạt động tốt. – pvllnspk