Следующая строка кода дает сбой
Room.databaseBuilder(
applicationContext,
MyDatabase::class.java, "MyDB")
.build()
Вот приложение Minimal Complete Verifiable (MCV), которое вы можете легко скопировать
В build.gradle для проекта убедитесь, чтоприсутствуют следующие элементы:
allprojects {
repositories {
google()
jcenter()
}
}
В build.gradle для приложения убедитесь, что присутствует следующее
dependencies {
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version" // because I'm using Kotlin
}
Все инструкции по настройке приведены в соответствии с официальным документом https://developer.android.com/topic/libraries/architecture/adding-components
Теперь просто используйте Android Studio и создайте проект, используя шаблон «Пустое действие».В этом примере MCV требуется только 3 новых файла.
Создайте первый файл с именем MyThing.kt
//MyThing.kt
import android.arch.persistence.room.ColumnInfo
import android.arch.persistence.room.Entity
@Entity(tableName = "myThing")
data class MyThing(@ColumnInfo var myString: String)
Создайте второй файл с именем MyDao.kt
import android.arch.persistence.room.Dao
import android.arch.persistence.room.Insert
import android.arch.persistence.room.OnConflictStrategy
@Dao
interface MyDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(myThing: MyThing)
}
Создайте третий файл с именем MyDatabase.kt
import android.arch.persistence.room.Database
import android.arch.persistence.room.RoomDatabase
@Database(entities = arrayOf(MyThing::class), version = 1)
abstract class MyDatabase : RoomDatabase() {
abstract fun myDao(): MyDao
}
Теперь измените MainActivity
class
class MainActivity : AppCompatActivity() {
private var myDB: MyDatabase? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
myDB = Room.databaseBuilder(
applicationContext,
MyDatabase::class.java, "MyDB")
.build()
}
}
Запуск приложения сейчас вызовет серьезный сбой в строке, о которой я упоминал выше,Что я делаю не так?
ОБНОВЛЕНИЕ: вывод Logcat
--------- beginning of crash
12-29 13:23:46.098 12801-12801/com.le.kevin.roommcv E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.le.kevin.roommcv, PID: 12801
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.le.kevin.roommcv/com.le.kevin.roommcv.MainActivity}: java.lang.RuntimeException: cannot find implementation for com.le.kevin.roommcv.MyDatabase. MyDatabase_Impl does not exist
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.RuntimeException: cannot find implementation for com.le.kevin.roommcv.MyDatabase. MyDatabase_Impl does not exist
at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:93)
at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:630)
at com.le.kevin.roommcv.MainActivity.onCreate(MainActivity.kt:19)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-29 13:23:46.099 777-1936/? W/ActivityManager: Force finishing activity com.le.kevin.roommcv/.MainActivity
Impl?