【问题标题】:Android - Store Data in ArrayAndroid - 将数据存储在数组中
【发布时间】:2016-09-06 00:41:10
【问题描述】:

我已经学习了一段时间的 Android 开发,并且正在创建一个简单的应用程序以开始使用。该应用程序是一个简单的测验,会显示一个问题和一个用于回答问题的文本框。

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

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    您可以将这些“大量问题和答案”保存在一个 txt 文件中......然后从那里阅读它们。

    你可以使用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
    

    即使在应用关闭后,该值也会被存储。

    【讨论】:

    • 在 libgdx 中,您可以将它们与 Preferences 类一起使用。 Preferences 是使事物在 HTML5 应用程序中持久化的唯一方法。但它们最有可能用于设置(如音量、图形质量......)。对于这类事情,我会使用 txt,作为 XML、Json 或 CSV 格式。
    • 我知道 Preferences 类是最简单的方法 .. 这取决于“大量问题”有多大 .. 但是您对 XML 或 txt 文件很熟悉.. 非常简单且可维护的方式。 .
    【解决方案2】:

    在 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());
    }
    

    即使有一千个问题也不应该是什么大问题。如果它确实让您的游戏在启动时滞后,请将加载放在一个单独的线程中,并且在加载完成或同步问题列表/数组之前不要开始使用QuestionManager。也可以使用 libgdx 的集合来获得更好的性能和更少的垃圾收集。

    如果您真的想在 Android 上使用 sqllite,请选择 Interfacing with platform specific code。但是你不能在桌面上使用它!所以你需要创建一个桌面和一个android实现。

    【讨论】:

    • 很好的解释(我猜你正在编写一个 RPG 类型的游戏:P)。绝对不利于+1。 XML 使他可以使用属性来获得正确答案 (&lt;Answer correct="1"&gt;The Answer &lt;/Answer&gt;&lt;Answer correct="0"&gt;Wrong Answer&lt;/Answer&gt;)。
    【解决方案3】:

    免责声明:我不熟悉 Android 开发。

    使用数据库的替代方法可能是将 Java 对象序列化和反序列化为文件。 JSON(示例库:https://code.google.com/p/google-gson/)或 XML(示例库:http://x-stream.github.io/)是非常适合这种方法的文件格式。

    【讨论】:

    • 好点。 Libgdx 通过一些有用的方法支持 XML 和 Json,您可以轻松地创建和解析 XML/Json 文件。但根据他的需要,也许某种 CSV 会更好,因为他并不需要复杂的结构。
    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2021-04-27
    • 2018-10-08
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多