AndroidX Room неразрешенные супертипы RoomDatabase - PullRequest
0 голосов
/ 05 ноября 2018

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

Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
com.example.persistence.AppDatabase, unresolved supertypes: androidx.room.RoomDatabase

Настройка постоянства находится в отдельном модуле Android (постоянство).

build.gradle

// Kotlin StdLib
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

// Room
implementation      "androidx.room:room-runtime:$androidXRoom"
kapt "androidx.room:room-compiler:$androidXRoom"
implementation      "androidx.room:room-rxjava2:$androidXRoom"

ext.androidXRoom = "2.1.0-alpha02"

Я попытался изменить версию kotlin, версию комнаты на Android Arch Room, но она не работает. Я также попытался очистить проект и сделать недействительным кеш Android Studio. Но это не работает.

редактировать: источник базы данных приложения

package com.example.persistence.db

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.example.persistence.post.PostDbDao
import com.example.persistence.post.PostDbEntity

@Database(entities = [PostDbEntity::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun favoritePostsDao(): PostDbDao

    companion object {

        var INSTANCE: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase? {
            if(INSTANCE == null) {
                synchronized(AppDatabase::class) {
                     INSTANCE = Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "post_db").build()
                }
            }
            return INSTANCE
        }

        fun destroy() {
            INSTANCE = null
        }
    }

}

Ответы [ 3 ]

0 голосов
/ 20 марта 2019

Изменить зависимости Gradle, например

   REMOVE -> implementation "androidx.room:room-runtime:$androidXRoom"
   REPLACE WITH -> api "androidx.room:room-runtime:$androidXRoom"

enter image description here

0 голосов
/ 24 апреля 2019

Другие ответы будут скомпилированы, но лишены смысла иметь отдельный модуль для вашей базы данных / постоянных функций.

Вы не должны подвергать вашу Комнату сущности или базу данных комнаты за пределами вашего persistence модуля. Вместо этого вы должны написать функцию в вашем persistence модуле, которая отображает ваш PostEntity @Entity в простой Post класс данных.

Я написал об этом более подробно здесь: https://jacquessmuts.github.io/post/modularization_room/

0 голосов
/ 05 ноября 2018

Скорее всего, проблема заключается в том, как вы определяете свои зависимости, RoomDatabase является частью общедоступного API, поскольку ваш AppDatabase расширяет его, и вы, вероятно, используете этот класс в своих нижестоящих зависимостях. Однако RoomDatabase объявлен как зависимость только для реализации. Это означает, что класс обычно недоступен для зависимостей в процессе компиляции.

Попробуйте изменить "androidx.room:room-runtime:$androidXRoom" на api, чтобы он стал частью общедоступного API. Это, вероятно, должно устранить ошибку, с которой вы столкнулись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...