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