我正在开发一个应用程序,它将从webservice
获取数据和图像,并将其存储在设备中以供离线使用。同时,应用程序将一些数据存储在sqlite db
中,一些图像作为默认数据。
以下是应用流程:
Sqlite Db
获取数据
存储在设备中的图像路径并显示它们。webservice
并将其复制到 Sqlite DB(data)
以及稍后离线访问 device(images)
以下是问题:
做到这一点的最佳策略是什么(注意我也想要阻止 设备图库中显示的图像。他们将可以加入 仅来自应用程序)?
Assets Folder
中存储默认图像并复制
他们到第一个oppening的外部目录。对于离线
使用来自webservice的图像,下载并保存到
同一个目录?还要考虑到我想为不同的设备尺寸存储多个图像。因此,在第一次打开时,我会检查设备drawable folder (xxhdpi, xhdpi, hdpi, mdpi)
所采用的图像是这样的:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
case DisplayMetrics.DENSITY_MEDIUM:
break;
case DisplayMetrics.DENSITY_HIGH:
break;
case DisplayMetrics.DENSITY_XHIGH:
break;
case DisplayMetrics.DENSITY_XXHIGH:
break;
}
存储到SharedPreferences
上的文件夹,所以当我从服务下载图片时,它会到webservice
的特定图片大小的特定文件夹和grap它们
在这种情况下,管理图像的最佳和最简单的策略是什么?
[注意:我不想使用google extension files
因为数据和图像可以频繁使用]
答案 0 :(得分:1)
我应该首先将默认图像存储在资产文件夹中,然后将它们复制到第一个操作中的外部目录中。对于从Web服务中离线使用图像,请下载并将它们保存到同一目录中?
没有。当您启动应用程序并使用缓存机制时从服务器获取它们,因此当Internet不可用时,它将从缓存文件夹中获取。对于这些,您可以使用picasso库来完成这些工作。
我应该将SqliteDb中的所有图像存储为二进制数据(由于性能我不喜欢)
不,您不应该在sqlite数据库中存储图像,因为这会使您的应用数据库大小变大。通常,如果我们想要做这些类型的东西,那么我们只存储图像路径而不是二进制文件。
在这种情况下,管理图像的最佳和最简单的策略是什么?
当您调用服务来获取位图时,检查设备密度然后将高度和宽度发送到服务器,然后期望它返回该大小,如fetchImage?image_width = xxx& image_height = yyy