【发布时间】:2012-11-27 21:55:15
【问题描述】:
如何将图像保存到从图像 URL 检索到的 SD 卡?
【问题讨论】:
-
@Akusete... 你应该在 output.write(buffer, 0, buffer.length); 中替换 'buffer.length'到字节读取。否则垃圾数据将附加在文件末尾。
标签: android image download android-sdcard
如何将图像保存到从图像 URL 检索到的 SD 卡?
【问题讨论】:
标签: android image download android-sdcard
首先,您必须确保您的应用程序具有写入 sdcard 的权限。为此,您需要在应用程序清单文件中添加使用权限write external storage。见Setting Android Permissions
然后您可以将 URL 下载到 sdcard 上的文件中。一个简单的方法是:
URL url = new URL ("file://some/path/anImage.png");
InputStream input = url.openStream();
try {
//The sdcard directory e.g. '/sdcard' can be used directly, or
//more safely abstracted with getExternalStorageDirectory()
File storagePath = Environment.getExternalStorageDirectory();
OutputStream output = new FileOutputStream (new File(storagePath,"myImage.png"));
try {
byte[] buffer = new byte[aReasonableSize];
int bytesRead = 0;
while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
output.write(buffer, 0, bytesRead);
}
} finally {
output.close();
}
} finally {
input.close();
}
编辑: 在清单中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
【讨论】:
getExternalStorageDirectory()。你知道它是否返回一个斜杠吗?例如/sdcard 或 /sdcard/
Environment.getExternalStorageDirectory() 不返回String,因此您的代码无法编译。我为你更正了你的代码。
可以在 Android 开发者博客上的latest post 中找到一个很好的示例:
static Bitmap downloadBitmap(String url) {
final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
final HttpGet getRequest = new HttpGet(url);
try {
HttpResponse response = client.execute(getRequest);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w("ImageDownloader", "Error " + statusCode +
" while retrieving bitmap from " + url);
return null;
}
final HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = null;
try {
inputStream = entity.getContent();
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} finally {
if (inputStream != null) {
inputStream.close();
}
entity.consumeContent();
}
}
} catch (Exception e) {
// Could provide a more explicit error message for IOException or
// IllegalStateException
getRequest.abort();
Log.w("ImageDownloader", "Error while retrieving bitmap from " + url,
e.toString());
} finally {
if (client != null) {
client.close();
}
}
return null;
}
【讨论】: