Сохраненные данные не соответствуют содержанию базы данных SQLite litepal - PullRequest
0 голосов
/ 06 апреля 2020

Я новичок в android разработке.

Я пытаюсь сохранить данные в базе данных из json string

[{
    "question": "Who is the 'Modern Love' rock star singer?",
    "imageUrl": "https://postimg.cc/2VL1Y1jd",

    "answerOptions": [
        "Jimi Hendrix",
        "David Bowie",
        "Jim Morrison",
        "Elvis Presley"
    ],

    "correctAnswer": "David Bowie"
}]

и в mainActivity onCreate У меня есть:

for (int i = 0; i < list.size(); i++) {
    Quiz quiz = list.get(i);
    quiz.save();
}

, который отлично работает хорошо, поэтому, когда я отлаживаю, у меня есть:

enter image description here

Но когда я просматриваю файл базы данных, подсписок answerOptions отсутствует:

enter image description here

Таким образом, когда я пытаюсь runOnUiThread, список в litePal.findall не соответствует Quiz.class

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        List<Quiz> list = LitePal.findAll(Quiz.class);
        QuizAdapter quizAdapter = new QuizAdapter(list, MainActivity.this);
        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setAdapter(quizAdapter);
    }
});
class Quiz extends LitePalSupport {
    String question;
    String imageUrl;
    String [] answerOptions;
    String correctAnswer;
}

Есть ли какое-либо возможное решение / альтернатива этому подходу?

1 Ответ

0 голосов
/ 08 апреля 2020

Я решил эту проблему, изменив структуру данных:

[{
    "question": "Who is the 'Modern Love' rock star singer?",
    "imageUrl": "https://postimg.cc/2VL1Y1jd",
    "one": "Jimi Hendrix",
    "two": "David Bowie",
    "three": "Jim Morrison",
    "four": "Elvis Presley",
    "correctAnswer": "David Bowie"
}]

Затем настройте свой класс соответствующим образом:

public class Quiz extends LitePalSupport {
    String question;
    String imageUrl;
    String one;
    String two;
    String three;
    String four;
    String correctAnswer;
}

Затем в своем адаптере я добавил отдельные строки в массив

List<String> answerOptions = new ArrayList<>();
answerOptions.add(quiz.one);
answerOptions.add(quiz.two);
answerOptions.add(quiz.three);
answerOptions.add(quiz.four);
...
quizHolder.createRadioButtons(answerOptions.toArray(new String[0]));
...
...