我是android新手。我有一些图像存储在服务器上的某个路径上。在我的应用程序中,我希望图像应该从服务器加载一次,下次用户打开应用程序时应用程序不应再次加载它。请告诉我应该如何存储这些图像。请帮忙。
答案 0 :(得分:2)
对于应用缓存或内部存储(sdcard0)上的商店图片,您可以使用 Universal-Image-Loader,Aquery,Picasso 等库。
这些库可帮助您更快地加载图像,将图像保存在缓存或数据中。
您可以从此处下载此库
通用图像加载器比Aquery具有更多功能。
希望这可以帮助你。
答案 1 :(得分:0)
您可以将图像存储在文件中。您只需要为图像文件设置唯一名称,即url的示例md5哈希。
您可以使用以下代码保存图像:
File file = File(filePath)
try {
FileOutputStream outStream = FileOutputStream(file)
bitmap!!.compress(Bitmap.CompressFormat.PNG, 100, outStream)
outStream.flush()
outStream.close()
}catch(e: Exception){
Log.e("log", "error save image to cache $filePath")
}
}
并从文件中读取:
try{
BitmapFactory.Options optionsBitmapFactory = BitmapFactory.Options()
optionsBitmapFactory.inPreferredConfig = Bitmap.Config.ARGB_8888
Bitmap bitmap = BitmapFactory.decodeFile(filePath, optionsBitmapFactory)
}catch(e: Exception){
Log.e("log", "error load image from cache $filePath")
}
答案 2 :(得分:0)
它有几个图像加载器库。其中之一是Universal Image loader和Glide
您可以参考此Picasso v/s Imageloader v/s Fresco vs Glide
它会将图像存储在缓存中,下次将从缓存中提供图像。对于服务器映像,强烈建议使用Universal Image loader和Glide库。您还可以设置占位符图像。
答案 3 :(得分:0)
有两种方法: -
为示例缓存图像只需查看picaso库。
//代码如何使用picaso: -
/Initialize ImageView
ImageView imageView = (ImageView) findViewById(R.id.imageView);
//Loading image from below url into imageView
Picasso.with(this)
.load("YOUR IMAGE URL HERE")
.into(imageView);
将图像存储到外部或内部存储,并从存储中第二次获取。你可以再次使用picaso回调来保存位图cio.economictimes.indiatimes.com
答案 4 :(得分:0)
答案 5 :(得分:0)
以下是一些用于从URL加载图像的库,它会将图像作为缓存存储在内存中。
UIL:灵活且高度可定制的图像加载,缓存和显示工具。它提供了许多配置选项,并且可以很好地控制图像加载和缓存过程。
PICASSO: 处理ImageView回收并在适配器中下载取消。 复杂的图像转换,内存使用最少。 自动内存和磁盘缓存。
答案 6 :(得分:0)
首先,您必须确保您的应用程序有权写入SD卡。为此,您需要在应用程序清单文件中添加使用权限写入外部存储。见Setting Android Permissions
然后,您可以将URL下载到SD卡上的文件中。一个简单的方法是:
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" />