2017-08-16 40 views
0

我正在为Android创建此应用程序,我需要在离线环境中运行该应用程序。在某些时候,用户将在线并将他的数据与服务器同步以下载更改,然后在他离线时仍然使用应用程序。 情况是这样的:用户登录和应用程序检查与互联网,该帐户确实存在,如果该帐户存在它将下载用户数据,如信息和个人资料图片。应用程序和服务器之间的通信与改造创造,所以服务器返回一个像这样的JSON:如何在Android上使用离线管理远程图片?

{ 
    "data":{ 
    "username": "John Doe", 
    "avatar": { 
    "original" : "http://url/to/picture.jpg", 
    "p35x35" : "http://url/to/picture.jpg" } 
    } 
} 

,我认为转换到JSON对象并将其存储在数据库中。 (如果您在JSON上看到任何错误,请不要担心,我自己写的)。情况与图片一样,它们以互联网URL的形式出现,但我需要将其存储在本地,我无法在数据库中保存URL链接。我不知道哪个是我应该做的最好的方式。我已经考虑很多方面,但我不喜欢他们,我不知道他们很好,我不知道这是最好的办法:

1 - 使用毕加索的缓存处理,我不喜欢这个选项,因为缓存可以被删除,我相信毕加索更倾向于在线应用程序,有时可能离线,但大部分时间都在线。

2 - 每一张照片下载到本地文件夹,用他的SHA1或MD5将其重命名和名称设置为数据库作为“原始”和“p35x35”领域。

3 - 具有相同路径本地存储的图片,因为他们是在互联网上,EX-“存储/模拟/。应用/ .images/URL /到/ picture.jpg”

回答

0

您可以使用JSON数据图片的哈希检查与当地哈希如果数据是新/更新 及商家的图片这是很标准的最有名的应用程序在你的应用程序的本地文件夹使用的文件夹,并指定一个每个对象的文件夹以及数据库中的存储路径和哈希值,以及使用Internet的效率。 同样为了创建文件夹,如果有很多文件,您可以使用对象的类别并为文件的名称设置id。

+0

感谢,这是一个不错的主意,我会选择下载远程图像和计算URL的MD5和保存与该名称的文件,如果情况发生了变化网址会改变这样的MD5将是不同的 – Ramin

0

我觉得毕加索,滑翔或类似的图书馆是要走的路。当然,可以删除缓存(无论是由用户手动还是在系统资源耗尽时由系统删除)。

或者,您可以实现自己的缓存,利用现有的基础架构并实现最小缓存代码逻辑。见this question for more information