求指导:数据存储决策

时间:2011-04-28 23:17:16

标签: android

如果这个问题过于宽泛或过于“依赖”,我会提前道歉。

基本上,我需要决定如何在我的应用中存储和访问数据。该应用程序非常像抽认卡;卡的“前面”呈现主题,“后面”呈现细节/解释。起初,似乎SQLite数据库最适合这种类型的结构(也许它确实是,我只是不知道)因为数据是静态的,并且这个模型适用于db的行和列结构。 (顺便说一句,截至目前,我正在使用openCSV来解析包含我卡片的csv文件。认为它比SQLite更容易......)

我的问题(最后)是我希望能够显示某些数据项的图像。例如,某些卡应显示相应的图像。这是我可以用SQLite数据库做的事吗?比如,有一列存储图像的路径....?也许我所问的是非常基本的,但我还没有看到太多的例子来真正了解那里的设计选项。

我可能也会对如何基于是否有可用图像动态更改我的视图感到困惑。也许这只是一个动态创建一个imageview的问题,它的源是db指向的文件......

总之,我非常感谢有关如何在文本数据可用时获取和显示文本数据的一些指导,无论是SQLite还是其他方式。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果应用程序附带了所有这些数据,我建议将所有内容保存为资源。您可以拥有主题和详细信息的字符串数组,并且可以将图像存储为可绘制资源或资产。在后一种情况下,您可以将资产名称存储为另一个字符串数组资源。 (在前一种情况下,您必须构建从每张卡到资源标识符的映射。不幸的是,这是Android资源架构无法发挥作用的一个领域。)

如果您想使用SQLite,它有BLOB字段,您可以在其中存储图像本身,或者您可以存储图像资源标识符的int字段。查看可搜索的字典示例项目,了解如何从资源数据构建S​​QLite数据库。

答案 1 :(得分:0)

很抱歉,这确实是一种'依赖'的主题。

除非您存储大量数据行(大约10 000),否则XML文件将是您最好的选择。在我最近编写的一个列车时刻表应用程序中,我们使用了一个XML SAX解析器,将一个14 000记录数据库加载到内存中,并且在HTC Hero上花了不超过2秒,因此即使对于大型数据库也非常快。

仅当您想要使用数据库结构附带的关系时,才更可以使用SQLite选项。它处理大量行更好,但处理图像时很糟糕。

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

XML非常灵活,下面是您的xml文件的示例。有关编写xml架构的更多信息,请查看http://www.w3schools.com/schema/

<?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>