【问题标题】:Kotlin Room setup problems in Android StudioAndroid Studio 中的 Kotlin Room 设置问题
【发布时间】:2018-03-21 03:10:22
【问题描述】:

我正在努力在 Android Studio 中设置 Room+Kotlin 的简单示例,但这样做真的很痛苦。

我有这样的课程:

@Entity(tableName = "test")
data class Test(val name: String, val lastname: String)

@Dao
interface TestDao {
@Query("SELECT * FROM test")
fun loadAll(): List<Test>

@Insert
fun insertAll(vararg tests: Test)

@Delete
fun delete(test: Test)
}

应用数据库:

@Database(entities = arrayOf(Test::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
   abstract fun testDao(): TestDao
}

我的 build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
    applicationId "com.example.roomtest"
    minSdkVersion 15
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner 
"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
'proguard-rules.pro'
    }
 }
}

ext.roomVersion = '1.0.0-alpha9'


dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation('com.android.support.test.espresso:espresso-
core:3.0.1', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

// Room
compile "android.arch.persistence.room:runtime:$roomVersion"
compile "android.arch.persistence.room:rxjava2:$roomVersion"
kapt "android.arch.persistence.room:compiler:$roomVersion"

}
repositories {
mavenCentral()
}

Build.gradle(项目)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext.kotlin_version = '1.1.51'
repositories {
    google()
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0-beta7'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
}

allprojects {
repositories {
    google()
    jcenter()
    maven { url 'https://maven.google.com' }
 }
}

task clean(type: Delete) {
delete rootProject.buildDir
}

ext {
archRoomVersion = "1.0.0-alpha9"
}

我尝试在 MainActivity 中对我的数据库进行简单的插入:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AppDatabase db = Room.databaseBuilder(getApplicationContext(),
            AppDatabase.class, "database-name").build();

    Test test = new Test("test1", "test2");

    db.testDao().insertAll(test);
  }
}

但是,项目无法编译,错误是:

警告:警告:注释处理器“android.arch.persistence.room.RoomProcessor”支持的源版本“RELEASE_7”低于-source“1.8”

错误:任务 ':app:kaptDebugKotlin' 执行失败。 内部编译器错误。查看日志了解更多详情

如何正确设置这个非常简单的示例?我被卡住了,目前正在寻找正确的设置。

更新:

当我像这样在 gradle 中更改房间设置时:

//    // Room
//    implementation "android.arch.persistence.room:runtime:$roomVersion"
//    implementation "android.arch.persistence.room:rxjava2:$roomVersion"
//    kapt "android.arch.persistence.room:compiler:$roomVersion"

//room database
implementation "android.arch.persistence.room:runtime:1.0.0-alpha9"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha9"

应用程序现在启动,但在开始时崩溃,例外情况是:

java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.roomtest/com.example.roomtest.MainActivity}:java.lang.RuntimeException:找不到 com.example.roomtest.AppDatabase 的实现。 AppDatabase_Impl 不存在 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 原因:java.lang.RuntimeException:找不到 com.example.roomtest.AppDatabase 的实现。 AppDatabase_Impl 不存在 在 android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:90) 在 android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:440) 在 com.example.roomtest.MainActivity.onCreate(MainActivity.java:17) 在 android.app.Activity.performCreate(Activity.java:6237) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)

【问题讨论】:

  • 查看您在 Android Studio 中的Gradle Console 面板。通常那里有更多的错误日志
  • @StuStirling 我更新了我的问题,也许现在你可以帮忙?
  • annotationProcessor 更改为 kapt
  • 改了,还是一样的问题
  • 您的实体没有主键。添加另一列@PrimaryKey(autogenerate = true) val id : Long = 0

标签: android kotlin android-room


【解决方案1】:

发生此 RuntimeError 是因为房间编译器无法生成 AppDatabase 实现。

我建议您将 gradle 文件中的“编译”指令更改为“实现”。我认为这会有所帮助。

我正在再次阅读您的 gradle 文件并将其与我的比较,但我在任何地方都看不到这一行 implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

【讨论】:

  • 将您的 AppDatabase 类更改为 kotlin 而不是 java,然后重试
  • 我更新了我的问题,也许现在你可以帮忙?我还将 AppDatabase 转换为 kotlin
  • 将 annotationProcessor 更改为 kapt。我经常将 Room 与 Kotlin 一起使用,这种错误总是因为 gradle 文件;)
  • 我真的卡住了,没有关于这个主题的最新教程
  • 记得一定要“重建项目”你也可以把你的房间版本更新到1.0.0-alpha9-1 我觉得更稳定
【解决方案2】:

答案是把这一行放到gradle文件中:

compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.51"

整个设置(Kotlin)保持不变,gradle 看起来像这样:

// Room
implementation "android.arch.persistence.room:runtime:$roomVersion"
implementation "android.arch.persistence.room:rxjava2:$roomVersion"
kapt "android.arch.persistence.room:compiler:$roomVersion"
compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.51"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2021-01-06
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多