Android Studio中的Kotlin Room安装问题

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

我有类像:

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

DAO

 @Dao interface TestDao { @Query("SELECT * FROM test") fun loadAll(): List<Test> @Insert fun insertAll(vararg tests: Test) @Delete fun delete(test: Test) } 

AppDatabase:

 @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”小于“源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在android.app.android.os.Looper.loop(Looper.java:148)处的android.os.Handler.dispatchMessage(Handler.java:102)上的$ H.handleMessage(ActivityThread.java:1344)。在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)com.android上的java.lang.reflect.Method.invoke(Native Method)上的ActivityThread.main(ActivityThread.java:5417)。 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)at com.example.roomtest .MainActivity.onCreate(MainActivity.java:17)at android.app.Activity.performCreate(Activity.java:6237)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)at android.app.ActivityThread.performLaunchActivity( ActivityThread.java:2369)

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

我建议你在你的gradle文件中把“compile”指令改成“implementation”。 我认为它可以帮助。

我正在读你的gradle文件,并与我的比较,我没有看到任何地方这行implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

好。

所以答案就是把这一行放到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" 

希望这有助于某人,我为此失去了太多的时间