0

我正在为 Android 平台创建一个简单的琐事游戏。(对于它的价值,我是一个业余爱好者,只有在我能够腾出空闲时间时才有时间编写代码。因此,我的问题 - 就像我的技能一样 - 是非常基本的。)

如果我对 QuestionActivity 页面上的所有问题进行硬编码,我的游戏就可以工作,但从长远来看,这显然不是一个好方法。

我创建了一个包含以下属性的 Question 对象:String question、String[] answers、int correctPointer、String PithyComment。每个 Question 对象只有 4 个可能的答案。在 QuestionActivity 页面上,我创建了一个包含多个 Question 对象的 questionArray。我可以打乱数组中的项目,我可以打乱可能的答案,然后再将它们显示给用户,并且所有错误检查都可以正常工作。

我还创建了一个包含 50 多个问题的 XML 文件。我想在游戏初始化时将此文件的内容加载到 QuestionBank 对象数组中。过去几天我一直在研究这个问题,但我无法找出前进的最佳方法。在 Android/Java 中解析 XML 似乎比过去在其他编程语言中更复杂。每个 XML 解析教程似乎最终都需要创建多个类来处理这个非常简单的数据结构。我想知道是否有一些我根本没有看到的超级明显,更“成熟”的东西。

我的问题是:我应该使用 SAX、STAX 还是通过 DOM 解析器解析 XML 文件。或者,考虑到这个游戏永远不会有超过 500 个问题,我应该考虑改用 SQL Lite 吗?还是有更好的方法来做到这一点?

我不需要写入 XML,也不需要做任何花哨的解析,只需将一个标签的内容传递给适当的变量。可能与解析有关的唯一棘手的事情是每个问题有四个可能的答案。我有两个版本的 XML 文件:一个版本中的每个答案都与其他项目(问题、正确指针)处于同一级别,另一个版本中的四个答案包含在名为 answerList 的父标记中。在这一点上,由于总是有四个答案并且它们总是以相同的顺序出现,所以我倾向于将所有四个答案编码在与 XML 中的其他项目相同的级别,然后在阅读时手动将它们推送到一个数组中他们进入 QuestionBank。

谢谢。

4

2 回答 2

1

将其存储为数据库当然是一种选择,并且可能取决于您遇到的问题数量。

我建议使用 JSON。JSON 解析内置于 Android 中,也是大多数数据在 REST API 中传递的方式。

这是一个很好的教程:http ://www.androidhive.info/2012/01/android-json-parsing-tutorial/

您的问题结构如下所示:

{
    "question": "Sample Question",
    "answers": [ "A", "B", "C", "D" ],
    "correctPointer" 2,
    "pithyComment": "Not sure what a pithy comment is."
}

另一个相当详细的例子:How to parse JSON in Android

于 2013-07-14T01:42:11.023 回答
0

这是关于 DOM Parser 的一个很好的教程。它很简单,不太冗长,您不需要创建多个类来使用它。

例如(来自教程):

<?xml version="1.0"?>
<company>
    <staff id="1001">
        <firstname>yong</firstname>
        <lastname>mook kim</lastname>
        <nickname>mkyong</nickname>
        <salary>100000</salary>
    </staff>
    <staff id="2001">
        <firstname>low</firstname>
        <lastname>yin fong</lastname>
        <nickname>fong fong</nickname>
        <salary>200000</salary>
    </staff>
</company>

如何使用解析器:

 try {

    File fXmlFile = new File("/Users/mkyong/staff.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);

    //optional, but recommended
    //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
    doc.getDocumentElement().normalize();

    System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

    NodeList nList = doc.getElementsByTagName("staff");

    System.out.println("----------------------------");

    for (int temp = 0; temp < nList.getLength(); temp++) {

        Node nNode = nList.item(temp);

        System.out.println("\nCurrent Element :" + nNode.getNodeName());

        if (nNode.getNodeType() == Node.ELEMENT_NODE) {

            Element eElement = (Element) nNode;

            System.out.println("Staff id : " + eElement.getAttribute("id"));
            System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
            System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
            System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
            System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());

        }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
  }
于 2013-07-14T01:35:25.200 回答