Room: error: Не уверен, как преобразовать курсор в тип возвращаемого значения этого метода (void) - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть этот запрос, настроенный на возврат всех записей из этих таблиц и отображение информации о просмотре в android. БД настраивается с использованием библиотеки постоянства Room, также известной как SQLITE.

@Query
("SELECT moodBeforetable.userId, 
moodBeforetable.moodBefore, 
moodBeforetable.cbtId, 
cbtTable.automaticThought, 
cbtTable.twistedThinkingPK, 
cbtTable.challengeThought, 
cbtTable.rationalThought,  
cbtTable.date, 
moodAfterTable.moodAfter, 
twistedThinkingTable.twistedThinkingPK,
twistedThinkingTable.allOrNothing,  
twistedThinkingTable.blamingOthers,
twistedThinkingTable.catastrophizing, 
twistedThinkingTable.emotionalReasoning, 
twistedThinkingTable.fortuneTelling, 
twistedThinkingTable.labelling, 
twistedThinkingTable.magnifyingTheNegative, 
twistedThinkingTable.mindReading, 
twistedThinkingTable.minimisingThePositive,
twistedThinkingTable.overGeneralisation, 
twistedThinkingTable.selfBlaming, 
twistedThinkingTable.shouldStatement 

FROM moodBeforetable

JOIN cbtTable ON moodBeforetable.cbtId = cbtTable.cbtId
JOIN twistedThinkingTable ON cbtTable.cbtId = twistedThinkingTable.cbtId
JOIN moodAfterTable ON moodAfterTable.cbtId = cbtTable.cbtId

WHERE moodBeforetable.date >= datetime('now', '-1 year')
AND moodBeforetable.userId = :userId 
ORDER BY :date DESC")

LiveData<List<MoodBeforeTable>> moodLogsAll (int userId, String date);

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

Запрос возвращает некоторые столбцы, которые не используются com.example.feelingfit.persistence.tables.MoodBeforeTable. Вы можете использовать аннотацию @ColumnInfo в полях для указания сопоставления.

Может кто-нибудь помочь мне отладить это и выяснить, почему приложение не компилируется?

1 Ответ

0 голосов
/ 10 февраля 2020

Проблема Комната не может сопоставить результат из вашего пользовательского запроса с существующим MoodBeforeTable. Это потому, что вы возвращаете тип List<MoodBeforeTable>, но вы использовали объединения, используя TwistedThinkingTable и MoodAfterTable и т. Д.

Что вам нужно сделать, это создать новый POJO , как показано ниже :

public class MoodLogPojo() {
    private int userId;
    private String moodBefore;
    zprivate int cbtId;
    private String automaticThought;
    private int twistedThinkingPK;
    private String challengeThought;
    private String rationalThought;
    private String date;
    private String moodAfter;
    private int twistedThinkingPK;
    private String allOrNothing;
    private String blamingOthers;
    private String catastrophizing;
    private String emotionalReasoning;
    private String fortuneTelling;
    private String labelling;
    private String magnifyingTheNegative;
    private String mindReading;
    private String minimisingThePositive;
    private String overGeneralisation;
    private String selfBlaming;
    private String shouldStatement;

    // generate getters and setters too
    public void setSelfBlaming(Stirng selfBlming) {
        this.selfBlming = selfBlming
    }

    public String getSelfBlaming() { return selfBlaming; }

    // and so on ...

}

Затем используйте этот класс в качестве типа возвращаемого значения, например:

LiveData<List<MoodLogPojo>> moodLogsAll (int userId, String date);.

ПРИМЕЧАНИЕ. Обратите внимание на класс MoodLogPojo. Измените его в соответствии с соответствующими типами данных из каждого Entity.

...