Android - 用于静态数据的XML或SQLite

时间:2016-05-06 16:58:18

标签: android sql xml sqlite

我正在制作Android应用程序,用于练习驾驶执照理论考试。我将有大约3000个问题。问题对象将具有多个属性(文本,类别,子类别,答案,组)。我将创建它们并放入应用程序,因此数据不会改变。当用户选择类别时,应用程序将通过数据,查看哪个问题符合要求(用户选择)并将其放入列表中进行显示。我应该用什么来存储数据/问题,XML或SQLite?提前谢谢。

编辑: 我忘了提到应用程序不会使用互联网连接。此外,我计划制作简单的Java应用程序来输入数据。我会从政府的网站上复制文本(我无法访问他们的数据库,我必须创建我的数据库),所以我想把问题的图像网址放到java程序中,然后下载并自动命名。此外,在输入新问题的文本时,它会告诉我在输入其他数据之前该问题是否已存在。这样可以节省我的时间,我不需要保存每张照片并将其命名为我自己。这就是我在使用XML时的想法。我可以为JSON或SQLite执行此操作吗?

5 个答案:

答案 0 :(得分:4)

如果您不必执行复杂查询,我建议您将数据存储在 json 中,因为使用诸如GSON或{{3 }}

如果您不想在每个问题更改时重建您的应用/重新部署。您可以想象有一个小型的Web服务器(apache,nginx,tomcat),它为您在加载应用程序时请求的json文件提供服务。因此,当您的应用在线或使用缓存的应用时,您将下载问题。

XML是这种用法的详细格式,并没有带来太多功能......

要回复上一个问题,您可以按照以下方式整理代码:

/**
 * SOF POST http://stackoverflow.com/posts/37078005
 * @author Jean-Emmanuel
 * @company RIZZE
 */

public class SOF_37078005 {

    @Test
    public void test() {
        QuestionsBean questions = new QuestionsBean();

        //fill you questions
        QuestionBean b=buildQuestionExemple();
        questions.add(b); // success
        questions.add(b); //skipped     

        System.out.println(questions.toJson()); //toJson
    }


    private QuestionBean buildQuestionExemple() {
        QuestionBean  b= new QuestionBean();
        b.title="What is the size of your boat?";
        b.pictures.add("/res/images/boatSize.jpg");
        b.order= 1;
        return b;       
    }


    public class QuestionsBean{     
        private List<QuestionBean> list = new ArrayList<QuestionBean>();

        public QuestionsBean add(QuestionBean b ){
            if(b!=null && b.title!=null){
                for(QuestionBean i : list){
                    if(i.title.compareToIgnoreCase(b.title)==0){
                        System.out.println("Question "+b.title+" already exists - skipped  & not added");
                        return this;
                    }
                }
                System.out.println("Question "+b.title+" added");
                list.add(b);            
            }
            else{
                System.out.println("Question was null / not added");
            }
            return this;
        }
        public String toJson() {
            ObjectMapper m = new ObjectMapper();
            m.configure(Feature.ALLOW_SINGLE_QUOTES, true);
            String j = null;
            try {
                j= m.writeValueAsString(list);

            } catch (JsonProcessingException e) {
                e.printStackTrace();
                System.out.println("JSON Format error:"+ e.getMessage());
            }   
            return j;
        }


    }

    public class QuestionBean{      
        private int order;
        private String title;
        private List<String> pictures= new ArrayList<String>(); //path to picture 
        private List<String> responseChoice = new ArrayList<String>(); //list of possible choices


        public int getOrder() {
            return order;
        }
        public void setOrder(int order) {
            this.order = order;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public List<String> getPictures() {
            return pictures;
        }
        public void setPictures(List<String> pictures) {
            this.pictures = pictures;
        }
        public List<String> getResponseChoice() {
            return responseChoice;
        }
        public void setResponseChoice(List<String> responseChoice) {
            this.responseChoice = responseChoice;
        }


    }

}

CONSOLE OUTPUT

Question What is the size of your boat? added 
Question What is the  size of your boat? already exists - skipped  & not added
[{"order":1,"title":"What is the size of your boat?","pictures":["/res/images/boatSize.jpg"],"responseChoice":[]}]

GIST : 为您提供我为您制作的完整工作代码 Jackson

总而言之,使用JSON的一个好方法是: 1)创建一个bean来构建你的json(参见我的例子) 2)构建你的json并将其存储在一个文件中 3)使用android将你的json从文件加载到bean(你在andrdoid中) 4)使用bean来构建表单...等(而不是json文本文件):D

答案 1 :(得分:1)

我建议使用数据库(SQLite),因为它提供了优于xml的过滤功能。

答案 2 :(得分:1)

答案 3 :(得分:1)

您可以将Paper https://github.com/pilgr/Paper用作Android的快速NoSQL数据存储。

答案 4 :(得分:1)

SQLite是您系统的最佳选择。因为你必须维护(文本,类别,子类别,答案,组)等。所以如果你创建db并为它们创建表。这将很容易管理,你可以彼此关系,这是不可能的XML。