我一直在学习Android开发一段时间,现在正在创建一个简单的应用程序来开始。该应用程序是一个简单的测验,将显示一个问题和一个文本框来回答这个问题。
我正在使用的框架(Libgdx)不支持Sqlite,因此我无法使用它来存储所有问题和答案。我想知道如何在不使用数据库的情况下存储大量问题和答案,并且使用数组是否有效。
答案 0 :(得分:1)
免责声明:我不熟悉Android开发。
使用数据库的替代方法可能是将Java对象序列化和反序列化为文件。 JSON(示例库:https://code.google.com/p/google-gson/)或XML(示例库:http://x-stream.github.io/)是适合此方法的文件格式。
答案 1 :(得分:1)
您可以将这些“大量问题和答案”保存在txt文件中......然后从那里阅读。
OR
你可以使用SharedPreferences
以下是保存值的一行示例
SharedPrefences.Editor
editor.putString(editKey.getText().toString()); // putString is the method of Editor class, and in this example editkey is the field for EditText
即使应用程序关闭,该值也会存储。
答案 2 :(得分:1)
在libdx中,您不使用sqlite,只需使用它们提供的preferences
即可。它们存储在SharedPreferences
中的android和xml中的桌面上。为了存储问题,我很难建议使用xml格式并在运行时解析它。甚至可能加密/解密它。
让您了解我们在谈论什么。您可能使用刚刚入侵的编辑器创建XML。将其解析为一个外观漂亮的xml格式。例如,这是我的一个(不是问题,但我想你知道如何使用这个想法)
<root>
<quest1 id="1">
<name>quest1_name</name>
<description>quest1_description</description>
<subq type="KILL" monster_type="death" count="1" reward="15" />
</quest1>
<quest2 id="2">
<name>quest2_name</name>
<description>quest2_description</description>
<subq type="KILL" monster_type="silverbat" count="25" reward="45" />
</quest2>
</root>
现在您创建一个QuestionManager
,您可以在启动应用时启动它。这会将根Element
的所有子节点解析为一个问题。所以你的问题有一个带Element
的构造函数。这是管理器内部的加载:
public void loadQuests() {
XmlReader r = new XmlReader();
Element e = null;
try {
e = r.parse(Gdx.files.internal("quest/quest.xml"));
}
catch (IOException a) {
}
if (e != null) {
for (int i = 0; i < e.getChildCount(); i++) {
m_quests.add(new Quest(e.getChild(i))); //has reference to the core class
}
}
}
和Quest(在这种情况下,这不是我知道的问题!)
public Quest(Element xml) {
setID(xml.getInt("id"));
setTitle(xml.getChildByName(Quest.NAME).getText()); // final static string
setDescription(xml.getChildByName(Quest.DESC).getText());
}
即使是上千个问题也不应该是如此重要。如果确实让你的游戏在启动时滞后,则将加载放入sperat线程中,并且在加载完成之前不要开始使用QuestionManager
或者同步列表/数组问题。还可以使用libgdx的集合来获得更好的性能和更少的收集。
如果您真的想在Android上使用sqllite,请转到Interfacing with platform specific code。但你不能在桌面上使用它!所以你需要创建一个桌面和一个Android实现。