Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 17.06.2011
Сообщений: 33

Проблема с Room

05.10.2023, 23:20. Показов 1302. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Пытаюсь разобраться с Room. И столкнулся с такой ошибкой при компиляции: "Type of the parameter must be a class annotated with @Entity or a collection/array of it."

Если убрать suspend, то приложение компилируется (правда при добавлении записи приложение вылетает с ошибкой, что задержка UI в основном потоке может быть слишком длинной).

Не могу понять, почему добавление suspend к функции вызывает ошибку с типами.

Task.kt

Kotlin
1
2
3
4
5
6
7
8
9
@Entity(tableName = "task_table")
data class Task (
    @PrimaryKey(autoGenerate = true)
    var taskId: Long = 0,
    @ColumnInfo(name="task_name")
    var taskName: String = "",
    @ColumnInfo(name="task_done")
    var taskDone: Boolean = false
)
TaskDao.kt

Kotlin
1
2
3
4
5
@Dao
interface TaskDao {
    @Insert (onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(task: Task)    
}
gradle (app)

Code
1
2
3
4
5
6
7
8
9
plugins {   
    kotlin("kapt")
}
 
dependencies {
    implementation("androidx.room:room-runtime:2.5.2")
    implementation("androidx.room:room-ktx:2.5.2")
    kapt("androidx.room:room-compiler:2.5.2")   
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2023, 23:20
Ответы с готовыми решениями:

Проблема с ROOM (Kotlin)
Добавляю в своё приложение базу данных Room. На этапе компиляции выдаёт странные ошибки в Dao и ссылается на сгенерированные на java...

RxJava и Room
У меня есть программа, в которой данные хранятся в локальной базе данных с помощью Room, и я получаю данные через RxJava2. В Provider в...

Secret room
Всем привет! В свободное время занимаюсь решением задачек на одном ресурсе. Столкнулся с проблемой, что в одном из заданий, не могу...

5
1 / 1 / 0
Регистрация: 17.06.2011
Сообщений: 33
07.10.2023, 14:03  [ТС]
@Database(version = 1, entities = [Task::class])

Вот из-за этой строки выдаётся ошибка, но она верная, во всех мануалах так. Что не нравится то компилятору?

TaskDatabase.kt
Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Database(version = 1, entities = [Task::class])
abstract class TaskDatabase : RoomDatabase() {
    abstract var taskDao: TaskDao
 
    companion object {
        @Volatile
        private var INSTANCE: TaskDatabase? = null
 
        fun getInstance(context: Context): TaskDatabase {
            synchronized(this) {
                var instance = INSTANCE
                if (instance == null) {
                    instance = Room.databaseBuilder(
                        context.applicationContext,
                        TaskDatabase::class.java,
                        "tasks_database"
                    ).build()
                    INSTANCE = instance
                }
                return instance
            }
        }
    }
}
0
93 / 66 / 27
Регистрация: 23.06.2019
Сообщений: 477
07.10.2023, 15:15
не обращали внимание, что строчка
kapt("androidx.room:room-compiler:2.5.2")
подсвечена и даются рекомендации, что рекомендуется сделать?

Добавлено через 1 минуту
Или как в ошибке написано. Вынести в другой поток.

Вариантов починить - масса.
0
1 / 1 / 0
Регистрация: 17.06.2011
Сообщений: 33
07.10.2023, 16:01  [ТС]
Я занимаюсь изучение мобильной разработки пару недель.
Был бы благодарен за конкретный совет, как поправить (хотя бы один из многих, как вы сказали).
Подсвеченный kapt советует использовать KSP
Я понимаю, что для вас, возможно, мой вопрос выглядит смешным и глупым, но я нахожусь в тупике, ибо, повторюсь, код написал по книжке, плюс уже все статьи на эту тему developer.android.com просмотрел и везде +- одно и то же, и оно не работает.

Ошибка такая:
error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
kotlin.coroutines.Continuation<? super kotlin.Unit> $completion);

Не вижу, чтобы в ошибке что-то говорилось про поток. В ошибке говорится, что тип параметра должен быть классом с аннотацией @Entity или её коллекцией.

Добавлено через 18 минут
Это жесть какая-то.

Пытался ставить ksp и никак не получалось, всё время писало ошибку, что неизвестный плагин.
В итоге сейчас шарился по настройкам Android SDK и решил обновить gradle с версии 8 на 8.4 и... плагин подключился.
В общем код начал компилироваться, ошибка с типом пропала.
Но вопрос, почему не работало с kapt, хотя должен был работать, так и остался. И вопрос почему не мог найтись ksp тоже остался. 3 дня коту под хвост.
0
93 / 66 / 27
Регистрация: 23.06.2019
Сообщений: 477
07.10.2023, 16:12
Потому что криворукие программисты этим room занимаются. У них который раз проблема с suspend вылазит.
Прошлый раз пришлось проапгрейдить библиотеки до беты версии, что бы починилось.
В этот раз у них чего-то с процессингом аннотаций накосячено.

Можно было не менять kapt на ksp. Использовать не suspend функции в дао, а обычные. И запускать эти функции в другом потоке.

Можно еще что-то придумать. Я не знаю. Не важно сколько ты времени занимаешься этим. Они постоянно все ломают и меняют. Поэтому каждый день - как новичок.

Добавлено через 4 минуты
Сообщения об ошибке вообще ничего не говорят прикладному программисту. ну, не будет же он копаться в исходных кодах этого room/dao? Весь смысл библиотек, что бы они скрывали от нас все, что под капотом. Иначе проще чистый sqlite брать и на нем самому работать с базками данных без room-дао и без чужих косяков. Своих достаточно.
0
1 / 1 / 0
Регистрация: 17.06.2011
Сообщений: 33
07.10.2023, 16:19  [ТС]
Я примерно так и думал, что это какой-то косяк библиотеки. Т.к. в таком элементарном коде просто не могло быть ошибки.
Так или иначе, спасибо, что откликнулись.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2023, 16:19
Помогаю со студенческими работами здесь

Room: подключение готовой БД
Задача: имеется готовая дб, ее необходимо использовать в приложении. Собственно вопрос как правильно ее впихувать в приложение. ...

Room. Не производится запись
Пишу простое тестовое приложение с использованием библиотеки Room. Проблема: не получается произвести запись в таблицу. Приложение...

Room: как правильно инициализировать БД?
Задача: при первом запуске приложения произвести начальную инициализацию БД приложения данными. например, из Json, а затем загрузить меню...

Работа с Room через createFromAsset
Всем привет :) Учусь работать с Room задаю базу данных через database = Room.databaseBuilder(getApplicationContext(), ...

Аналог Room + LiveData в SQLite
Ув. программисты, подскажите, пожалуйста, как мне реализовать при прямом использовании БД SQLite аналог наблюдателя как в Room + LiveData....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru