我想设计一个语言学习Android应用程序,从数据库中检索随机问题集并显示给用户。
我有不同类型的问题,例如多项选择题,填空,匹配正确的选择,将单词排列成正确的句子,听取音频和回答理解问题。
如何将这些不同类型的问题存储在数据库中并随机检索并显示给用户以进行回答?
我正在使用SQLite。
答案 0 :(得分:2)
这是一个非常广泛的问题,你需要考虑很多事情。例如,您的问题建模和持久性 - 将它们存储在数据库中。几年前我制作了类似的Android应用程序。
我建议的第一件事是采用渐进式步骤;如果你开始使用多项选择题(这些都有四个答案),事情会容易得多。然后,一旦你有了工作,添加其他类型的问题。
对于对象域的建模,我建议从单个基础Question
类开始。这可以包含一些常见属性,例如唯一ID,名称/短名称,也许是某种难度指标。
在此之后,您可以拥有子类型的问题,例如MultipleChoiceQuestion
,ShortAnswerQuestion
和EssayQuestion
。它们可能具有其他属性(例如多重选择的可能答案列表)。
将所有这些映射到一堆表并非易事。通常的方法是每班一张桌子;另一个选项是一个包含所有类的所有属性的表,以及某种“类型”鉴别器。我建议前者,因为它是一个更清晰的属性分离。
最后,就随机而言,有两种方法:在数据库级别上随机(更高效,因为它返回的数据更少)或在应用程序级别上随机。不同的是“嘿数据库,给我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 :(得分:0)
我用于此类问题的方法是唯一标识您的每一行。序列ID很好。
每次循环时,将所有ID放入数组结构中。数组中的每个条目都有一个随机数和一个ID到您的SQLite表中。
执行此操作后,对数组进行排序,现在您已经对问题进行了随机排序。按顺序处理。
答案 2 :(得分:0)
你的问题太抽象了,仍然试图回答你的问题。
首先,您需要创建一个包含唯一标识问题的表的数据库。
然后,您可以将查询解除为:
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
,可用于从sqlite表中选择随机行。
然后,只需显示该问题的代码。