Сохранить результаты тестов в SQLite или SharedPreference?

166
01 июля 2017, 09:33

Я новичок в Java и в Android. Пишу первое приложение, это тесты ПДД. Думаю делать где-то 40 билетов. Задача стоит в том что бы сделать грамотно статистику ответов. Я не знаю как это сделать. В приложение стандартно: Вопрос (textView) и 3 кнопки (Button). Я так понимаю на каждую кнопу нужно вешать какое-то значение. Например если брать SQLite это прописывать лучше int? Создать таблицу например "Билет1" и там данные типа int?и так по каждому билету? Если ответ не правильный это 0, если правильный 1. Но как их потом достать из БД? Нужно когда тест закончился вылезла активность с количеством правильных и не правильных ответов. Так же будет еще одна активность где нужно выбрать номер билеты и вылезет статистика ошибок. Есть ли какие-то уроки именно по таким тестам? Или мб вы мне логику объясните плиз. я пока не очень соображаю как это все лучше сохранить и как лучше читать из БД. Надеюсь вы меня поняли. Заранее спасибо

Answer 1

SharedPreferences никаким образом не подходит для использования в качестве хранилища подобного рода данных, однозначно необходимо использовать БД.

Вам нужно создать в БД таблицы questions, answers и results: в 1-ой - вопросы, во 2-ой - варианты ответов, с отметкой правильного, в 3-ей - прогресс.

В questions пишется ID вопросов и собственно сами вопросы (текст):

| _id | question |
------------------
| 1   | вопрос1  |
| 2   | вопрос2  |

При выводе на экран вы получаете очередной вопрос из БД и выводите его. ID этого вопроса сохраняете для последующего использования.

В answers пишутся ответы по следующей структуре:

| _id | ID_question | answer  | correct |
----------------------------------------
|  1  |  1          | ответ1.1|   0     |
|  2  |  1          | ответ2.1|   1     |
|  3  |  2          | ответ1.2|   1     |
|  4  |  2          | ответ2.2|   0     |
|  5  |  2          | ответ3.2|   0     |

первый столбец - собственный ID ответа, второй - ID вопроса, к которому относится этот ответ (здесь ответы с ID = 1 и 2 - к первому вопросу. 3, 4 и 5 - ко второму), третий столбец - сам ответ (текст), четвертый - отметка правильного ответа (1 - правильный ответб 0 - неправильный).
Такая архитектура позволит включать к каждому вопросу произвольное количество ответов, например к первому - два варианта, ко второму - три варианта.

При выводе вариантов ответов делаете в БД запрос из таблицы answers по столбцу ID_question с ID равным ID вопроса, полученный ранее (при выводе вопроса). Когда пользователь выберет один из вариантов ответа, получаете значение correct для этого ответа и его содержимое пишите в таблицу results (столбец result), в столбец ID_question таблицы results пишем ID вопроса (полученный в начале)

В results пишем результаты прохождения тестов :

| _id | ID_question | result |
------------------------------
| 1   |  1          |        |
| 2   |  2          |        |

Столбец result заполняется по мере прохождения теста. В дальнейшем, простой выборкой столбца result по значению = 1 из этой таблицы вы получите и количество правильных ответов и ID тех вопросов, что отвечены правильно.

Если у вас проблемы с организацией архитектуры БД и работы с ней, советую почитать книгу Бейли Л. - "Изучаем SQL (Бестселлеры O'Reilly)" - 2012г. в ней вы получите всю необходимую информацию

Очень подробно разбирается создание игры-викторины (по сути билеты ПДД та же викторина) в книгах, которые вам стоит почитать: П.Дейтел "Android для разработчиков" 2016г. и Б.Харди "Android. Программирование для профессионалов" 2016г. второе издание.

READ ALSO
Интеграция 1С с Android

Интеграция 1С с Android

Есть ли какие-нибудь способы интеграции с 1С, не прибегая к решению "1с мобильное приложение"? REST сразу можно откинуть, тк

254
Unknow test Suite in Allure reports

Unknow test Suite in Allure reports

Проект Maven+Junit+AllureAllure-junit-adaptor 1

262
как растянуть канвас-бекграунд на всю страницу?

как растянуть канвас-бекграунд на всю страницу?

Поиск постоянно выкидывает на "как растянуть на всю высоту окна"Мне же нужно, чтоб растягивалось на высоту страницы

249
Несколько изображений в html в telegra.ph

Несколько изображений в html в telegra.ph

Нужно перепарсить вк-пост в telegraph

284