我环顾了这里和其他网站,但我想不出解决办法。
一切正常,直到我初始化Main Activity.kt
中的RoomViewModel.kt
。
我一直在犯这个错误
java.lang.RuntimeException: cannot find implementation for com.caller.fakecaller.data.DataBase. DataBase_Impl does not exist
at androidx.room.Room.getGeneratedImplementation(Room.java:97)
at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:1358)
at com.caller.fakecaller.data.DataBase$Companion.getInstance(DataBase.kt:31)
at com.caller.fakecaller.data.RoomViewModel.<init>(RoomViewModel.kt:18)
at com.caller.fakecaller.util.RoomViewModelFactory.create(RoomViewModelFactory.kt:14)...
我有这个格里德尔
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdk 31
defaultConfig {
applicationId "com.caller.fakecaller"
minSdk 21
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion '1.0.2'
}
packagingOptions {
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
}
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.6.0'
implementation "androidx.compose.ui:ui:1.0.2"
implementation "androidx.compose.material:material:1.0.2"
implementation "androidx.compose.ui:ui-tooling-preview:1.0.2"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation 'androidx.activity:activity-compose:1.3.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:1.0.2"
debugImplementation "androidx.compose.ui:ui-tooling:1.0.2"
//Room
implementation "androidx.room:room-runtime:2.3.0"
annotationProcessor "androidx.room:room-compiler:2.3.0"
// optional - Kotlin Extensions and Coroutines support for Room
implementation("androidx.room:room-ktx:2.3.0")
// Lifecycle components
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.lifecycle:lifecycle-common-java8:2.3.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
//Navigation with Compose
implementation("androidx.navigation:navigation-compose:2.4.0-alpha08")
//Preferences
implementation("androidx.preference:preference-ktx:1.1.1")
//Activity
implementation 'androidx.activity:activity-ktx:1.4.0-alpha01'
//Glide Accompanist
implementation "dev.chrisbanes.accompanist:accompanist-glide:0.4.2"
}
当我添加插件kotlin-android
和kotlin-kapt
时,它说它们找不到。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
task clean(type: Delete) {
delete rootProject.buildDir
}
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"
}
}
allprojects {
configurations.all {
resolutionStrategy {
cacheChangingModulesFor 0, 'seconds'
}
}
}
但那给了我这些错误
com/android/build/gradle/BaseExtension
> com.android.build.gradle.BaseExtension
Unable to load class 'com.android.build.gradle.BaseExtension'.
在数据库文件中,我做了如下操作:
private const val DATABASE_NAME = "FakeCaller"
@Database(entities = [Contact::class, RingTone::class], version = 1, exportSchema = false)
abstract class DataBase:RoomDatabase() {
abstract fun UserDao(): UserDao
abstract fun RingDao():RingDao
//Implementing the DataBase
companion object {
@Volatile
private var INSTANCE: DataBase? = null
fun getInstance(context: Context): DataBase {
synchronized(this) {
var instance = INSTANCE
if (instance == null) {
instance = Room.databaseBuilder(
context.applicationContext,
DataBase::class.java,
DATABASE_NAME
).build()
INSTANCE = instance
}
return instance
}
}
}
}
并将所有东西连接到RoomViewModel(我也为它创建了一个工厂)
class RoomViewModel(application: Application) : AndroidViewModel(application) {
val readContactList : LiveData<List<Contact>>
val readFileUri: LiveData<Uri>
private val repository : Repository
init {
val dbInstance = DataBase.getInstance(application)
val userDao = dbInstance.UserDao()
val ringDao = dbInstance.RingDao()
repository = Repository(userDao, ringDao)
readContactList = repository.getContacts
readFileUri = repository.getUri()
}
suspend fun getContact(id:Long): LiveData<Contact>{
return repository.getContact(id)
}
...
}
这是我做的
setContent {
FakeCallerTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
val context = LocalContext.current
val roomViewModel: RoomViewModel = viewModel(
factory = RoomViewModelFactory(context.applicationContext as Application)
)
Greeting("Android")
}
我认为上下文有问题,但我真的不知道。还在学习。。。
请帮帮忙
这应该会有所帮助。
现代方法:
在插件
块中,
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt' //Add this
}
然后,使用依赖关系
,
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
那么根据下面的评论,,
这些都是我所需要的,以建立良好的。
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"
嘿,等等,你连接到互联网了吗?这些可能需要工作室从网上下载(自动下载)。如果下载未启动,请检查gradle是否配置为脱机工作。如果是,切换状态,它将下载。
根据下面的评论,这似乎已经解决了这个问题
project-level-build{
dependencies{
classpath 'com.android.tools.build:gradle:7.1.0-alpha04'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
我是Android开发新手,需要为大学建立我的第一个项目。大学用的是旧版本的XML和Java,但是我想学Compose,所以我学了Kotlin。 现在,在设置好一切之后,我试图使用hiltViewModel()方法将视图模型注入到可组合函数中,但我得到了一个错误。我看了这个教程:https://www.youtube.com/watch?v=A7CGcFjQQtQ 在让这个工作之后。现在它说找不到
当我试图构建我的应用程序时,我遇到了以下编译错误: 持久性模块在Android设置中是独立的。 建筑格拉德尔 ext.androidXRoom=“2.1.0-alpha02” 我试着把kotlin版本,room版本,改回AndroidArch room,但没用。我还尝试了清理项目和使Android Studio的缓存失效。但它不起作用。 编辑:AppDatabase源
从一个使用spring、JPA和JDBC连接到mysql数据库的程序开始,我试图将该应用程序配置为在嵌入式模式下使用H2数据库。 使用MYSQL一切正常,但使用H2则不然。 我无法让H2返回任何记录,尽管记录在那里,所以如果我通过JDBC进行相同的查询,如果我看到它们。 我的配置如下: 因此,如果我编写以下代码: 当我使用JDBC时,如果记录存在,我会在日历表中看到它,但当使用JPA时,它似乎没有
错误:查询有问题:[SQLITE_ERROR]SQL错误或缺少数据库(没有这样的表:任务) 显示了这个错误,我怎么可能修复它? 我正在学习这个教程
并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。
我是新来的和我试图我的得到一个从它。我试图这样做的它与这是id但问题是我不知道如何返回目标从。 这就是<代码>刀 这是Repository类