当前位置: 首页 > 知识库问答 >
问题:

AndroidX房间未解决的超型房间数据库

阎建华
2023-03-14

当我试图构建我的应用程序时,我遇到了以下编译错误:

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设置中是独立的。

建筑格拉德尔

// 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版本,room版本,改回AndroidArch room,但没用。我还尝试了清理项目和使Android Studio的缓存失效。但它不起作用。

编辑:AppDatabase源

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个答案

阴宏爽
2023-03-14

其他答案可以编译,但却没有为数据库/持久性函数提供单独的模块。

您不应该在持久化模块之外公开文件室实体或文件室数据库。相反,您应该在persistence模块中编写一个函数,将PostEntity@实体映射到一个简单的Post数据类中。

我在这里写了更详细的内容:https://jacquessmuts.github.io/post/modularization_room/

祝嘉懿
2023-03-14

更改gradle依赖项,例如

   REMOVE -> implementation "androidx.room:room-runtime:$androidXRoom"
   REPLACE WITH -> api "androidx.room:room-runtime:$androidXRoom"
左丘昕
2023-03-14

问题更可能在于您如何定义依赖项,RoomDatabase是公共API的一部分,因为您的AppDatabase扩展了它,并且您可能会在下游依赖项中使用该类。但是RoomDatabase被声明为仅限实现的依赖项。这意味着该类在编译期间通常不适用于下游依赖项。

尝试将"androidx.room: room-runtime:$androidXRoom"更改为api配置,使其成为公共API的一部分。这可能会解决您遇到的错误。

 类似资料:
  • 错误:找不到符号类DataBindingComponent

  • 错误:查询有问题:[SQLITE_ERROR]SQL错误或缺少数据库(没有这样的表:任务) 显示了这个错误,我怎么可能修复它? 我正在学习这个教程

  • 并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。

  • 我是新来的和我试图我的得到一个从它。我试图这样做的它与这是id但问题是我不知道如何返回目标从。 这就是<代码>刀 这是Repository类

  • 我目前正在开发一个基于文本的游戏,在游戏中,你可以在房间之间移动,并在所说的房间中拾取物品,直到你到达“老板”房间。到目前为止,我已将所有内容正确打印出来,并将其显示在房间中是否有物品、物品是什么以及您所在的房间中。 我目前的问题是,它不是根据用户输入来改变房间。例如,您从Sepulture开始。用户输入North会将您的位置带入兵营。然而,这并不能让我远离seculture。 我的代码如下: 感

  • 我转换java代码到kotlin代码,我得到类型未解决的java类错误。 我的Java类是 已转换的Kotlin类 非常感谢。