如何创建图像本地存储就像一个简单的“缓存”

时间:2016-06-27 07:17:24

标签: android json image

我正在开发一个Android应用程序我已经实现了一个带有标题(ImageView)和内容(不同的textview)的自定义列表视图,所有数据都是从包含所有文本的json和指向一个文本的链接获取的。图像。

我必须实现一个在本地文件夹中下载图像的功能,而不是从互联网上下载以从本地文件夹中获取。

我有问题:

1)我必须实现一个在解析我的JSON时在本地存储中下载图像的函数。如果解析器发现图像必须下载。

2)解析后,下载的图像必须与本地图像相关联。

3)当我尝试显示所有数据时,图像必须显示在本地。

(实际上我使用凌空从互联网上加载图像)

我怎么能这样做?如何维护图像和数据之间的链接

    [
      {
        "date":"MY DATE",
        "desc":"My description",
        "id":"1",
        "img":"http:\/\/MYURL\/FOLDER\/homeone.jpg",
        "text":" My text",
        "title":"My title"
      }
   ]

*****编辑1 *****

我有Picasso库的问题,我不明白如何实现缓存。例如,在解析我的JSON之后,我可以获得我的JSON项目的URL。

在这种情况下http:\/\/MYURL\/FOLDER\/homeone.jpg现在我必须将图像保存到本地存储。

Picasso.with(this)
            .load(url)
            .networkPolicy(NetworkPolicy.OFFLINE)
            .into(imageView);

这是我在StackOverflow上的另一个问题中找到的代码,这可以帮助我创建缓存吗?如果是,我如何指定缓存文件夹? 是否只能将图像保存在本地存储上?这个缓存是“永久性的”,还是在重新启动应用程序时会删除所有数据?

1 个答案:

答案 0 :(得分:0)

您尝试实现的内容已在Picasso

中实施

尽量避免轮子发明:)

UPD: 毕加索自动缓存图像,你根本不需要关心这个东西。但是,您可以尝试此示例手动设置缓存。 这是您在OkHTTP的帮助下定义缓存的方法:

OkHttpClient client = new OkHttpClient();
        client.setConnectTimeout(connectTimeOut, TimeUnit.SECONDS);
        client.setReadTimeout(readTime, TimeUnit.SECONDS);

        File cachePath = FuncFileDownload.getStoragePath(context, "pre");
        client.setCache(new com.squareup.okhttp.Cache(cachePath, 30000000));

        sPicasso = new Picasso.Builder(context)
                .downloader(new OkHttpDownloader(client))
                .build();
        Picasso.setSingletonInstance(sPicasso);