如何在 Android 上管理离线使用的远程图片?
How to manage remote pictures for offline using on Android?
我正在为 Android 创建此应用程序,我需要该应用程序在离线环境中运行。在某个时候,用户将在线并将他的数据与服务器同步以下载更改,并且在那之后当他离线时它应该仍然使用该应用程序。
情况是这样的:用户登录,应用程序通过互联网检查该帐户是否确实存在,如果该帐户存在,它将下载用户信息和个人资料图片等数据。应用程序和服务器之间的通信是用 Retrofit 创建的,所以服务器 returns 一个 JSON 像这样:
{
"data":{
"username": "John Doe",
"avatar": {
"original" : "http://url/to/picture.jpg",
"p35x35" : "http://url/to/picture.jpg" }
}
}
然后我将 JSON 转换为对象并将其存储在数据库中。 (如果你在 JSON 上看到任何错误,请不要担心,我自己写的)。情况与图片有关,它们来自互联网 URL 但我需要将其存储在本地,我无法在数据库中保存 URL 链接。我不知道哪种方法最好。我考虑了很多方法,但我不喜欢它们,我不知道它们是否合适,我不确定哪种方法最好:
1 - 使用 Picasso 进行缓存处理,我不喜欢这个选项,因为可以删除缓存,而且我认为 Picasso 更面向在线应用程序,这些应用程序有时可能会离线,但大部分时间都在线。
2 - 将每张图片下载到本地文件夹,用他的 SHA1 或 MD5 重命名并将该名称设置为数据库的 "original" 和 "p35x35" 字段。
3 - 使用与 Internet 上相同的路径在本地存储图片,例如 - "storage/emulated/.application/.images/url/to/picture.jpg"
我认为 Picasso、Glide 或类似的库是可行的。当然,可以删除缓存(如果 运行 资源不足,可以由用户手动删除或由系统删除)。
或者,您可以为它实现自己的缓存,利用现有的基础设施并只实现最少的缓存代码逻辑。参见 this question for more information。
如果数据是 new/updated,您可以使用 json 数据中的图片哈希来检查本地哈希
为了存储图片,在大多数著名的应用程序中,使用应用程序本地文件夹中的文件夹并为每个对象指定一个文件夹并将路径和哈希存储在数据库中是非常标准的,这对于使用 Internet 非常有效。
此外,对于创建文件夹,您可以使用对象的类别并在文件很多的情况下为文件名设置 id。
我正在为 Android 创建此应用程序,我需要该应用程序在离线环境中运行。在某个时候,用户将在线并将他的数据与服务器同步以下载更改,并且在那之后当他离线时它应该仍然使用该应用程序。 情况是这样的:用户登录,应用程序通过互联网检查该帐户是否确实存在,如果该帐户存在,它将下载用户信息和个人资料图片等数据。应用程序和服务器之间的通信是用 Retrofit 创建的,所以服务器 returns 一个 JSON 像这样:
{
"data":{
"username": "John Doe",
"avatar": {
"original" : "http://url/to/picture.jpg",
"p35x35" : "http://url/to/picture.jpg" }
}
}
然后我将 JSON 转换为对象并将其存储在数据库中。 (如果你在 JSON 上看到任何错误,请不要担心,我自己写的)。情况与图片有关,它们来自互联网 URL 但我需要将其存储在本地,我无法在数据库中保存 URL 链接。我不知道哪种方法最好。我考虑了很多方法,但我不喜欢它们,我不知道它们是否合适,我不确定哪种方法最好:
1 - 使用 Picasso 进行缓存处理,我不喜欢这个选项,因为可以删除缓存,而且我认为 Picasso 更面向在线应用程序,这些应用程序有时可能会离线,但大部分时间都在线。
2 - 将每张图片下载到本地文件夹,用他的 SHA1 或 MD5 重命名并将该名称设置为数据库的 "original" 和 "p35x35" 字段。
3 - 使用与 Internet 上相同的路径在本地存储图片,例如 - "storage/emulated/.application/.images/url/to/picture.jpg"
我认为 Picasso、Glide 或类似的库是可行的。当然,可以删除缓存(如果 运行 资源不足,可以由用户手动删除或由系统删除)。
或者,您可以为它实现自己的缓存,利用现有的基础设施并只实现最少的缓存代码逻辑。参见 this question for more information。
如果数据是 new/updated,您可以使用 json 数据中的图片哈希来检查本地哈希 为了存储图片,在大多数著名的应用程序中,使用应用程序本地文件夹中的文件夹并为每个对象指定一个文件夹并将路径和哈希存储在数据库中是非常标准的,这对于使用 Internet 非常有效。 此外,对于创建文件夹,您可以使用对象的类别并在文件很多的情况下为文件名设置 id。