如何存储从URL加载的图像

时间:2015-12-04 05:36:05

标签: android

我是android新手。我有一些图像存储在服务器上的某个路径上。在我的应用程序中,我希望图像应该从服务器加载一次,下次用户打开应用程序时应用程序不应再次加载它。请告诉我应该如何存储这些图像。请帮忙。

7 个答案:

答案 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 loaderGlide

您可以参考此Picasso v/s Imageloader v/s Fresco vs Glide

它会将图像存储在缓存中,下次将从缓存中提供图像。对于服务器映像,强烈建议使用Universal Image loader和Glide库。您还可以设置占位符图像。

答案 3 :(得分:0)

有两种方法: -

  1. 为示例缓存图像只需查看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);
    
  2. 将图像存储到外部或内部存储,并从存储中第二次获取。你可以再次使用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" />