Android - 将数据存储在数组中

时间:2014-03-20 23:07:23

标签: java android libgdx

我一直在学习Android开发一段时间,现在正在创建一个简单的应用程序来开始。该应用程序是一个简单的测验,将显示一个问题和一个文本框来回答这个问题。

我正在使用的框架(Libgdx)不支持Sqlite,因此我无法使用它来存储所有问题和答案。我想知道如何在不使用数据库的情况下存储大量问题和答案,并且使用数组是否有效。

3 个答案:

答案 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实现。