2016-05-06 2 views
2

Я делаю Android-приложение для практических испытаний теории водительских прав. У меня будет около 3000 вопросов. Объект вопроса имеет несколько атрибутов (текст, категория, подкатегория, ответы, группа). Я создам их и добавлю в приложение, поэтому данные никогда не изменятся. Когда пользователь выбирает категорию, приложение будет обрабатывать данные, посмотреть, какой вопрос соответствует требованиям (этот пользователь выбрал) и поместить в список для отображения. Что я должен использовать для хранения данных/вопросов, XML или SQLite? Заранее спасибо.Android - XML ​​или SQLite для статических данных

Редактировать: Я забыл упомянуть, что приложение не будет использовать интернет-соединение. Кроме того, я планировал сделать простое java-приложение для ввода данных. Я бы скопировал текст с веб-сайта правительства (у меня нет доступа к их базе данных, и я должен создать свой), поэтому я решил просто поставить URL-адрес изображения в java-программу, и он будет загружать его и называть его автоматически. Кроме того, при вводе текста нового вопроса мне будет сказано, существует ли этот вопрос до ввода других данных. Это сэкономит мне время, мне не нужно будет сохранять каждую фотографию и называть ее самой. Это то, что я думал, используя XML. Могу ли я сделать это для JSON или SQLite?

ответ

2

Если вы не должны выполнять сложные запросы, я бы рекомендовал хранить в ДАННЫЕ JSON, так как очень хорошо интегрированы в Android программы и приложения, используя LIB, такие как GSON или Jackson.

Если вы не хотите перестраивать свое приложение/передислоцировать при каждом изменении вопроса. Вы можете представить себе небольшой веб-сервер (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: предоставляет вам полный рабочий код I» ve сделано для вас https://gist.github.com/jeorfevre/5d8cbf352784042c7a7b4975fc321466

В заключение, что является хорошей практикой для работы с JSON: 1) создайте компонент для создания json (см. Мой пример здесь) 2) создайте свой json и сохраните его в файле, например 3) Используя андроид, загрузите json из файла в bean-компонент (у вас есть он в andrdoid) 4) используйте компонент для создания вашей формы ... и т. Д. (А не текстовый файл json): D

+0

Спасибо, что ответили, я посмотрю на JSON. Я отредактировал свой пост, вы можете прочитать править и сказать мне, влияет ли это на ваш ответ? – exiibeat

+1

обновил мой ответ, чтобы показать вам, как заполнить компонент, как создать строку json. :) enjoy – jeorfevre

+0

Спасибо вам большое. Когда я вернусь домой, я буду проверять и проверять код. Когда я проверю все, я отмечу ваш ответ. – exiibeat

1

Я бы рекомендовал базу данных (SQLite), поскольку она обеспечивает превосходную функциональность фильтрации по сравнению с xml.

0

Вы можете использовать бумагу https://github.com/pilgr/Paper Сво быстро NoSQL хранения данных для Android.

+0

никогда не пробовал он, попробуй. Спасибо, что поделился. – jeorfevre

1

SQLite является лучшим для вашей системы. потому что вам нужно будет поддерживать (текст, категорию, подкатегорию, ответы, группу) и т. д. Поэтому, если вы создадите db и создадите для них таблицу. Это будет легко управлять, и вы можете взаимодействовать друг с другом, что невозможно для XML.

+0

Спасибо, что ответили. Вопросы не изменятся вообще. Только хорошая вещь с sqlite, которую я вижу, - это таблицы, которые можно использовать для разделения категорий. Я отредактировал свой пост, вы можете прочитать править и сказать мне, влияет ли это на ваш ответ? – exiibeat

Смежные вопросы