2011-04-28 49 views
1

如果这个问题太宽泛或太“它取决于”,我很抱歉。寻求指导:数据存储决策

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

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

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

总之,我真的很感激一些关于如何获取和显示文本数据以及图像的指导他们是可用的,无论是在SQLite或其他方式。

谢谢!

+0

为什么目录中的命名文件不起作用?太多?未排序?你需要每个图像有多个“列”数据?图像名称可能需要'/'或'\ 0'吗?简而言之:你对这个数据库有什么要求? – sarnold 2011-04-28 23:25:55

回答

0

如果所有这些数据都与应用程序一起发货,我建议只保留所有存储为资源的数据。您可以为主题和细节设置字符串数组,并且可以将图像存储为可绘制资源或资源。在后一种情况下,您可以将资产名称存储为另一个字符串数组资源。 (在前一种情况下,您必须从每张牌制作一张地图到资源标识符,不幸的是,这是一个Android资源架构不会发光的区域。)

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

+0

非常感谢@Ted。我很欣赏这些反馈。我有点困惑。您建议在我的strings.xml中对主题和细节进行硬编码,每个主题/细节对都是一个新字符串?你确实说过数组,所以你prolly意味着你所说的;)你可以举一个存储资产名称为字符串数组资源的例子吗? – LuxuryMode 2011-04-28 23:33:04

+0

这里描述了声明字符串数组资源的语法(http://developer.android.com/guide/topics/resources/string-resource.html#StringArray)。我想到了平行阵列,一个用于卡片的前端,一个用于后端,另一个用于图像(缺少图像的空字符串)。更好的方法是使用可绘制图像ID的[typed array](http://developer.android.com/guide/topics/resources/more-resources.html#TypedArray)。 – 2011-04-29 02:36:25

+0

如果我使用了一个打印阵列,我将如何与相应的卡(正面和背面)匹配图像? – LuxuryMode 2011-04-29 07:00:33

0

对不起,但这真的是一个'它取决于'种话题。

除非你存储大量的数据行(大约10 000),否则XML文件将是你最好的选择。在我最近编写的Train Timetable应用程序中,我们使用XML SAX解析器将14 000个记录数据库加载到内存中,并且在HTC Hero上花费的时间不超过2秒,所以即使对于大型数据库来说也相当快。

只有在您想要使用数据库结构附带的关系时,SQLite选项才是可取的。处理大量的行更好,但处理图像时更糟糕。

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

XML非常灵活,下面是你的xml文件的样子。查看http://www.w3schools.com/schema/了解更多关于编写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

太棒了。这听起来很不错!谢谢!所以,只需创建我自己的XML文件,主题,卡片的正面和背面等。在我的XML中,我只是指向我的资产文件夹中的图像? – LuxuryMode 2011-04-28 23:37:01

+0

欣赏编辑。谢谢艾伦! – LuxuryMode 2011-04-29 12:31:26