Почему мой Android Room DAO не обновляет мою сущность (то есть таблицу) - PullRequest
0 голосов
/ 14 апреля 2020

Моя проблема: Когда я передаю обновленные данные из моего приложения в базу данных моей комнаты приложений, таблица не обновляется, но при отладке я не получаю никаких ошибок.

Что я сделал: Я выполнил некоторую отладку, но ничто не кажется ошибочным или подразумевающим проблему. Когда я перехожу через код и пропускаю объект «Вопросы» через DAO для комнаты и метод updateQuestion, он проходит через код комнаты без проблем и завершается.

Что происходит в моем коде: Ниже приведен пример кода. База данных - это ресурс, который копируется во внутреннее хранилище приложений в базах данных. Я подумал, что, возможно, обновляется не та база данных, но не обновляется. Пошагово, вот что происходит:

  1. ArrayList исходных данных сравнивается с обновленным ArrayList для каждого поля, чтобы определить, произошло ли обновление.

  2. Если обнаруживается обновление, создается объект Вопрос, передавая значения для сущностей QuestionID и Вопрос.

    // QUESTION
    if(!valuesAreDifferent(original.get(4), update.get(4))){
        Questions questions = new Questions(orgNoteTableIDs.getQuestionID(), update.get(4));
        rdb.getQuestionsDao().updateQuestion(questions);
    }

ОБНОВЛЕНИЕ: Я также пытался сделать это без успеха :

    if(!valuesAreDifferent(original.get(4), update.get(4))){
        Questions questions = rdb.getQuestionsDao().getQuestion(updatedNote.getQuestionID());
        questions.setQuestion(update.get(4));
        rdb.getQuestionsDao().updateQuestion(questions);
    }
Объект Вопросы передается методу DAO updateQuestion в QuestionDao ()
@Dao
public interface QuestionsDao {
    @Insert
    void addQuestion(Questions question);
    @Update
    void updateQuestion(Questions question);
    @Delete
    void deleteQuestion(Questions question);

    @Query("SELECT * FROM Questions ORDER BY Question")
    List<Questions> getQuestions();
    @Query("SELECT * FROM Questions WHERE QuestionID = :questionID")
    Questions getQuestion(int questionID);
    @Query("SELECT last_insert_rowid()")
    int lastQuestionPKID();
    @RawQuery
    List<Integer> customSearchQuestionsTable(SupportSQLiteQuery query);
}
Отсюда он проходит (я прошел) через код комнаты за DAO без каких-либо очевидных проблем. QuestionsDao updateQuestion(Questions obj)
...