繁体   English   中英

Android-将数据存储在数组中

[英]Android - Store Data in Array

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

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

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

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

您可以将那些“大量问题和答案”保存在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

即使关闭应用程序,该值也将被存储。

在libdx中,您不使用sqlite,而只是使用它们提供的preferences 它们存储在Android中的SharedPreferences并存储在桌面中的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解析为一个Question。 因此,您的Question具有一个使用Element的构造函数。 这是Manager内部的加载:

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
        }
    }
}

和任务(在这种情况下,这不是我知道的问题!)

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,请使用与平台特定代码的接口 但是您不能在台式机上使用它! 因此,您需要创建一个桌面和一个android实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM