2014-02-05 59 views
0

我是新来的android开发人员,想设计一个语言学习应用程序,从数据库中检索随机问题集并将其显示给用户。从SQLLite中检索随机数据

我有不同类型的问题,如多项选择题,填空,匹配正确的选项,将单词排列成适当的句子,听音频和回答理解问题。

我不知道如何将这些不同类型的问题存储在数据库中,并随机检索并显示给用户进行回答。

我正在使用SQLLite。

有人可以帮我或为我提供代码来实现吗?

回答

2

这是一个相当广泛的问题,有很多事情需要考虑。例如,您的问题建模和持久性 - 将它们存储在数据库中。几年前,我制作了类似的Android应用程序。

我建议的第一件事是逐步增加步骤;如果你仅仅从多项选择题开始(所有答案都有四个答案),事情就容易多了。然后,一旦你有这个工作,添加其他类型的问题。

对于建模您的对象域,我建议从一个基地Question类开始。这可以包含一些常用属性,如唯一ID,名称/短名称,也许是某种难度度量。

在此之后,您可以有问题的子类型,如MultipleChoiceQuestionShortAnswerQuestionEssayQuestion。他们可能有其他属性(如多选择可能的答案列表)。

将所有这些映射到一堆表中并不是微不足道的。通常的方法是每个班级一张桌子;另一个选项是一个表,其中包含所有类的所有属性,以及某种“类型”鉴别器。我建议前者,因为它是属性的更清晰的分离。

最后,就随机而言,有两种方法:数据库级别的随机数据(效率更高,因为它返回的数据更少)或随机应用程序级别。不同之处在于“嘿数据库,给我N个随机问题”与“嘿数据库,给我所有问题;嗨申请,随机抽出N个问题。”

要利用数据库,您可以使用此回答here,他们使用ORDER BY RANDOM() LIMIT N。我不知道SQLite,但是在SQL Server中,对于大型数据集,这可能非常慢;如果您有很多问题,请对其进行分析,看看它是否对您的应用程序太慢。

如果你有一个基本问题table with all questions, this will work quite easily for you. If not, you may need to do something similar where you poll for A multiple choice questions, B short answer questions, etc. where A + B + ... = N`你想要的问题的数量。

+1

@faz,因为您将此标记为已接受,您是否可以澄清您发现的有用内容,以及需要改进或更详细的内容? – ashes999

0

我用这种类型的问题的方法是唯一标识每个行。序列号很好。

每次你经过循环时,将所有的ID放入一个数组结构中。数组中的每个条目在您的SQLite表中都有一个随机数和一个ID。

执行此操作后,对数组进行排序,现在您已对问题进行了随机排序。按顺序处理。

+0

我认为如果所有问题都是同一类型的话,我们可以这样做。例如,如果所有问题都是mcq,那么我可以加载相关答案。但是在这里,我存储着不同类型的问题并随机检索它们。 – faz

+0

如何处理不同类型的问题完全是一个不同的问题。你会想在你的问题上提出一个问题类型,然后以不同的方式处理不同的问题类型。这些都不难,只需要一点点的操作。如果您想讨论,请提出一个新问题。 – Thom

0

你的问题太抽象了,仍然试图回答你的问题。

首先,您将需要创建一个数据库,其中将包含一个唯一标识您的问题的表。

然后,你可以解雇查询为:

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;可用于从SQLite表中选择一个随机行。

然后,只需显示该问题的代码即可。