我正在为Android创建此应用,我需要在离线环境下运行该应用。在某些时候,用户将在线并将他的数据与服务器同步以下载更改,并且在他离线后应该仍然使用该应用程序。 在这种情况下:用户登录和应用程序检查该帐户确实存在,如果帐户存在,它将下载用户数据,如信息和个人资料图片。应用程序和服务器之间的通信是使用Retrofit创建的,因此服务器返回如下的JSON:
{
"data":{
"username": "John Doe",
"avatar": {
"original" : "http://url/to/picture.jpg",
"p35x35" : "http://url/to/picture.jpg" }
}
}
我将该JSON转换为Object并将其存储在数据库中。 (如果您发现JSON有任何错误,请不要担心,我自己写了)。情况是图片,他们作为互联网URL,但我需要将其存储在本地,我不能保存数据库上的URL链接。我不知道哪个是我应该做的最好的方式。我考虑了很多方法,但我不喜欢他们,我不知道他们是否很好,而且我不确定哪种方式最好:
1 - 使用Picasso进行缓存处理,我不喜欢这个选项,因为可以删除缓存,我相信Picasso更倾向于在线应用程序,有时候可能处于脱机状态,但大部分时间都在线。
2 - 将每张图片下载到本地文件夹,使用他的SHA1或MD5重命名,然后将该名称设置为数据库,作为"原文"和" p35x35"字段。
3 - 使用与他们在互联网上相同的路径在本地存储图片,例如#34;存储/模拟/ .application / .images / url / to / picture.jpg"
答案 0 :(得分:0)
我认为Picasso,Glide或类似的图书馆是可行的方式。当然,可以删除缓存(由用户手动删除或者在资源不足时由系统删除)。
或者,您可以为它实现自己的缓存,利用现有的基础架构并实现最小的缓存代码逻辑。请参阅this question for more information。
答案 1 :(得分:0)
如果数据是新的/更新的,您可以使用json数据中的图片哈希来检查您的本地哈希 并且为了存储图片,它在大多数着名的应用程序中非常标准,在应用程序本地文件夹中使用文件夹,并为每个对象指定一个文件夹,并在数据库中存储路径和哈希,并且使用Internet非常有效。 另外,对于创建文件夹,您可以使用对象的类别,如果有大量文件,则可以为文件名设置id。