Room. Создание простейшего примера

158
01 ноября 2018, 06:00

В чём ошибка и как можно исправить?

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.root.pets/com.example.root.pets.MainActivity}: java.lang.RuntimeException: cannot find implementation for com.example.root.pets.AppDatabase. AppDatabase_Impl does not exist
@Entity
class Person {
    @PrimaryKey
    internal var name: String? = null
    internal var age: Int = 0
    internal var favoriteColor: String? = null
}
@Dao
interface PersonDao {
    // Получение всех Person из бд
    @get:Query("SELECT * FROM person")
    val allPeople: List<Person>
    // Добавление Person в бд
    @Insert
    fun insertAll(vararg people: Person)
    // Удаление Person из бд
    @Delete
    fun delete(person: Person)
    // Получение всех Person из бд с условием
    @Query("SELECT * FROM person WHERE favoriteColor LIKE :color")
    fun getAllPeopleWithFavoriteColor(color: String): List<Person>
}
@Database(entities = arrayOf(Person::class /*, AnotherEntityType.class, AThirdEntityType.class */), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract val personDao: PersonDao
}
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val myThread = Thread(object : Runnable {
        override fun run() {
            var db = Room.databaseBuilder(getApplicationContext(),
                    AppDatabase::class.java, "populus-database4").build()
            val everyone = db.personDao
            val person = Person()
            person.name = "John Smith"
            person.age = 10000
            person.favoriteColor = "black"
            everyone.insertAll(person)
            val persons = everyone.allPeople
            Log.d("111", "${everyone.allPeople[0].name}")
        }
    })
    myThread.start()
    }
}
Answer 1

Зайдите в gradle файл и добавьте строчку, найдите annotationProcessor строчку и добавьте такую же только со словом kapt. Вот пример

annotationProcessor "android.arch.persistence.room:compiler:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
Answer 2

Разобрался.
@PrimaryKey - не может быть null, поэтому:

@Entity
class Person {
    @PrimaryKey
    var name: String = ""
    var age: Int = 0
    var favoriteColor: String? = null
}

Добавить в Gradle app:

apply plugin: 'kotlin-kapt'
...
implementation "android.arch.persistence.room:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"

Поправил сам вопрос. Сделал добавление записи и вывода в лог name.

READ ALSO
Не верный селект? sqlite

Не верный селект? sqlite

Пишу не большого бота с базой sqliteВ базе две таблицы: products и categories_to_subcategories

168
Запуск Java приложения с GUI на смартфоне [закрыт]

Запуск Java приложения с GUI на смартфоне [закрыт]

Можно ли как-то запустить Java проект с использованием GUI на мобильном устройстве?

182
Spring boot не отдается страница

Spring boot не отдается страница

Начинаю разбираться со спрингомНе работает самый банальный пример, со статьи на хабре

161
Выбор среды разработки

Выбор среды разработки

Хочу попробовать разрабатывать под андроид на Java, работал в intelliJ idea до этого, привык к ней, установил андроид студио и вопрос вот в чем: будет...

151