我正在制作Android应用程序,用于练习驾驶执照理论考试。我将有大约3000个问题。问题对象将具有多个属性(文本,类别,子类别,答案,组)。我将创建它们并放入应用程序,因此数据不会改变。当用户选择类别时,应用程序将通过数据,查看哪个问题符合要求(用户选择)并将其放入列表中进行显示。我应该用什么来存储数据/问题,XML或SQLite?提前谢谢。
编辑: 我忘了提到应用程序不会使用互联网连接。此外,我计划制作简单的Java应用程序来输入数据。我会从政府的网站上复制文本(我无法访问他们的数据库,我必须创建我的数据库),所以我想把问题的图像网址放到java程序中,然后下载并自动命名。此外,在输入新问题的文本时,它会告诉我在输入其他数据之前该问题是否已存在。这样可以节省我的时间,我不需要保存每张照片并将其命名为我自己。这就是我在使用XML时的想法。我可以为JSON或SQLite执行此操作吗?
答案 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)
然后在链接中使用库SQLiteAssetHelper- https://github.com/jgilfelt/android-sqlite-asset-helper
如何使用的教程 - http://www.javahelps.com/2015/04/import-and-use-external-database-in.html
答案 3 :(得分:1)
您可以将Paper https://github.com/pilgr/Paper用作Android的快速NoSQL数据存储。
答案 4 :(得分:1)
SQLite是您系统的最佳选择。因为你必须维护(文本,类别,子类别,答案,组)等。所以如果你创建db并为它们创建表。这将很容易管理,你可以彼此关系,这是不可能的XML。