Получение «Сущности и POJO должны иметь пригодный для использования конструктор publi c» при использовании базы данных Room - PullRequest
0 голосов
/ 10 июля 2020

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

Итак, у меня есть эта Entity

@Entity(tableName = "story_id")
data class StoryIdEntity(
    @PrimaryKey
    @ColumnInfo(name = "type")
    val type: String,
    @ColumnInfo(name = "ids")
    val ids: List<Int>
)

И у меня есть этот интерфейс Dao

@Dao
interface HackerNewsDaoInterface {
    @Query("SELECT ids FROM story_id where type = :type")
    suspend fun getStories(type: String): List<Int>
}

Когда я его компилирую, я получаю следующую ошибку:

  • Сущности и POJO должны иметь пригодный для использования publi c конструктор. У вас может быть пустой конструктор или конструктор, параметры которого соответствуют полям (по имени и типу).
  • Запрос возвращает некоторые столбцы [идентификаторы], которые не используются java .lang.Integer. Вы можете использовать аннотацию @ColumnInfo в полях, чтобы указать сопоставление. Вы можете подавить это предупреждение, аннотировав метод с помощью @SuppressWarnings (RoomWarnings.CURSOR_MISMATCH). Столбцы, возвращаемые запросом: ids. Поля в java .lang.Integer:

Ч / б У меня есть правильно работающий преобразователь типов для List.

Обновление 1

Пока что я изменил метод Дао, чтобы он работал.

@Dao
interface HackerNewsDaoInterface {
    @Query("SELECT * FROM story_id where type = :type")
    suspend fun getStories(type: String): StoryIdEntity
}

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Создайте класс-оболочку для списка идентификаторов, например:

data class StoryIds (
    val ids: List<Int>
)

Затем измените свой запрос, чтобы он возвращал экземпляр класса-оболочки:

@Query("SELECT ids FROM story_id where type = :type")
suspend fun getStories(type: String): StoryIds
0 голосов
/ 10 июля 2020

добавьте это в свой класс данных, чтобы исправить «должен иметь пригодный для использования publi c конструктор»

constructor():this("", ArrayList<Int>())
...