Android 寻求指导:数据存储决策

Android 寻求指导:数据存储决策,android,Android,如果这个问题太宽泛或太复杂,我会提前道歉,这要视情况而定 基本上,我需要决定如何在我的应用程序中存储和访问数据。该应用程序的工作原理非常类似于抽认卡;卡片正面显示主题,背面显示详细信息/说明。一开始,SQLite数据库似乎最适合这种类型的结构,也许真的是这样,我只是不知道,因为数据是静态的,这个模型很适合db的行和列结构。顺便说一句,到目前为止,我正在使用openCSV解析包含我的卡的csv文件。我觉得这比SQLite简单 最后,我的问题是,我希望能够显示一些数据项的图像。例如,有些卡片应该显示

如果这个问题太宽泛或太复杂,我会提前道歉,这要视情况而定

基本上,我需要决定如何在我的应用程序中存储和访问数据。该应用程序的工作原理非常类似于抽认卡;卡片正面显示主题,背面显示详细信息/说明。一开始,SQLite数据库似乎最适合这种类型的结构,也许真的是这样,我只是不知道,因为数据是静态的,这个模型很适合db的行和列结构。顺便说一句,到目前为止,我正在使用openCSV解析包含我的卡的csv文件。我觉得这比SQLite简单

最后,我的问题是,我希望能够显示一些数据项的图像。例如,有些卡片应该显示相应的图像。这是我可以用SQLite db做的事情吗?比如,让一列存储到图像的路径。。。。?也许我要问的是最基本的,但我只是没见过太多的例子,所以我对设计选项并没有很好的理解

我可能还不知道如何根据是否有可用图像动态更改视图。也许这只是动态创建一个imageview的问题,其源是db指向的文件

总之,我真的很想得到一些关于如何在图像可用时获取和显示文本数据以及图像的指导,无论是用SQLite还是其他方式


谢谢

如果所有这些数据都随应用程序一起提供,我建议将所有数据都存储为资源。您可以使用主题和详细信息的字符串数组,并且可以将图像存储为可绘制资源或资产。在后一种情况下,您可以将资产名称存储为另一个字符串数组资源。在前一种情况下,您必须构建从每张卡到资源标识符的映射。不幸的是,这是Android资源体系结构没有发挥作用的一个领域


如果您想使用SQLite,它有BLOB字段,您可以在其中存储图像本身,也有int字段,您可以在其中存储图像资源标识符。查看searchable dictionary示例项目,了解如何从资源数据构建SQLite数据库。

很抱歉,这确实是一个“视情况而定”的主题

除非您要存储大量大约10000行的数据,否则XML文件将是最佳选择。在我最近编写的一个火车时刻表应用程序中,我们使用了一个XML SAX解析器将14000条记录数据库加载到内存中,在HTC Hero上只需2秒钟,因此即使对于大型数据库,速度也相当快

只有当您希望利用数据库结构附带的关系时,SQLite选项才更可取。它在处理大量行方面更好,但在处理图像方面却很糟糕

由于闪存卡不是关系型的,我建议使用xmlSax解析器创建一个xml文件,并在资产文件夹中创建一个图像文件夹。您甚至可以通过pngCrunch运行图像以节省一些空间

XML非常灵活,下面是一个XML文件的示例。有关编写xml模式的更多信息,请查看

<?xml version="1.0" encoding="UTF-8"?>
<cards>
  <card title="card 1" topic="atopic" image="image file name">
    <front>Lots of text</front>
    <back>Lots of text</back>
  </card>
  <card ..>
    ..
  </card>
</cards>

为什么目录中的命名文件不起作用?太多了未分类的?每个图像需要多个“列”数据?图像名称中可能需要/或\0?简而言之:你需要从这个数据库中得到什么?非常感谢@Ted。我感谢你的反馈。我有点困惑。您建议在my strings.xml中硬编码主题和细节,每个主题/细节对都是一个新字符串?你确实说过数组,所以你说的都是真的;您能否给出一个将资产名称存储为字符串数组资源的示例?下面描述了声明字符串数组资源的语法。我想到的是平行阵列,一个用于卡片正面,一个用于背面,一个用于图像,一个空字符串用于丢失图像。一个更好的方法是使用一组可绘制的图像ID。如果我使用一个类型化数组,我将如何将图像与其对应的前后卡相匹配?我想象你可以通过索引来完成。只需在没有图像的地方输入零或其他无效的值作为资源id。太棒了。这听起来真不错!非常感谢。所以,只需创建我自己的xml文件,其中包含主题、卡片的正面和背面等。在我的xml中,我只需指向资产文件夹中的图像?