我需要将几个图像下载到目录,以便可以离线访问内容

Ers*_*man 12 java android json caching android-glide

我得到一些包含一些食物菜单项的JSON数据

请注意:这只是一个示例,有时会有超过2个图像,阵列中还有更多菜单项!

{
  "menu": [
    {
      "url": "/api/v1/menu/1",
      "name": "Best Food",
      "description": "really nice food",
      "opening_time": "every day from 9am to 6pm",
      "contact_email": "info@food.com",
      "tel_number": "+54 911 3429 5762",
      "website": "http://bestfood.com",
      "images": [
        {
          "url": "https://blahblah/image1.jpg"
        },
        {
          "url": "https://blahblah/image2.jpg"
        }
      ]
    },

  ]
}
Run Code Online (Sandbox Code Playgroud)

每个项目都有一些信息和一组图像URL.

我正在使用Glide图像库来处理这些图像,并使用Retrofit 2.0从端点下载JSON数据.一切都很顺利.

但是,我需要存储此下载的数据以供离线访问.

目前,我在现有模型上使用ORM Lite将所有JSON数据存储在数据库中.这部分还可以.

但是,在我的数据库中,我只存储图像URL,因为我被告知在数据库中存储图像(作为blob)不是好方法.

因此,我的应用程序中有一个部分可以查看已保存的菜单,如果用户选择,可以选择将其下载以供脱机访问.

此时值得一提的是,我已经在数据库中拥有原始菜单信息,因为用户必须首先查看菜单才能在DB中获取它.

但问题是图像.

这是我不知道如何进行的地方,但我列出了我正在考虑的解决方案和问题,并希望人们可以告诉我什么是最好的行动方案.

  1. 使用服务下载图像.我认为这是强制性的,因为我不知道将有多少图像,即使用户退出应用程序,我也希望继续下载

  2. Glide有一个仅下载图像选项,您可以在此处此处阅读其配置缓存所在的位置(内部私有或外部公共).问题是我对设置缓存大小感到不舒服,因为我不知道需要什么.我想设置无限.

  3. 我需要能够删除保存的菜单数据,特别是如果它保存在外部公共目录中,因为在删除应用程序时不会删除该菜单数据,或者如果用户选择从应用程序中删除已保存的菜单.我以为我可以将文件图像URI或整个保存菜单的位置存储在数据库中,但不确定这是否是一种好方法

  4. 我在不同的来源和答案中读到,在这个用例中只是将图像缓存到SD卡等,我应该专门使用网络库来避免将位图分配给堆内存.我目前在我的应用程序中使用OK HTTP.

Kar*_*hri 2

如果您希望即使用户退出也能继续下载,那么使用服务可能是一个不错的选择。getExternalStorageDirectory()当您的应用程序被卸载时,存储在使用创建的目录中的图像将被自动删除。此外,您可以检查内部存储器是否足够大以存储图像。如果您使用此方法,这些图像将在卸载应用程序时被删除。