为什么Room显示给我AppDatabase_Impl不存在的错误?

10 浏览
0 Comments

为什么Room显示给我AppDatabase_Impl不存在的错误?

01-17 14:25:21.567 5084-5084/? E/AndroidRuntime: 致命异常: 主要进程: com.example.harv.swat, PID: 5084

java.lang.RuntimeException: 无法启动活动

ComponentInfo{com.example.harv.swat/com.example.harv.swat.HomeActivity}:

java.lang.RuntimeException: 找不到 com.example.harv.swat.model.AppDatabase 的实现。AppDatabase_Impl 不存在

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2696)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2757)

at android.app.ActivityThread.-wrap12(ActivityThread.java)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1504)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:163)

at android.app.ActivityThread.main(ActivityThread.java:6237)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Caused by: java.lang.RuntimeException: 找不到 com.example.harv.swat.model.AppDatabase 的实现。AppDatabase_Impl 不存在

at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:92)

at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:454)

at com.example.harv.swat.model.Db.(Db.java:16)

at com.example.harv.swat.model.Db.getInstance(Db.java:20)

at com.example.harv.swat.HomeActivity.onCreate(HomeActivity.java:28)

at android.app.Activity.performCreate(Activity.java:6847)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2649)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2757) 

at android.app.ActivityThread.-wrap12(ActivityThread.java) 

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1504) 

at android.os.Handler.dispatchMessage(Handler.java:102) 

at android.os.Looper.loop(Looper.java:163) 

at android.app.ActivityThread.main(ActivityThread.java:6237) 

at java.lang.reflect.Method.invoke(Native Method) 

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877) 

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

public class Db {

AppDatabase adb;

private static Db db;

private Db(Context context){

adb = Room.databaseBuilder(context,

AppDatabase.class, "swat").allowMainThreadQueries().build();

}

public static Db getInstance(Context context){

if(db==null){

db = new Db(context);

}

return db;

}

public MyDAO getDao(){

return adb.userDao();

}}

DOA class

@Dao

public interface MyDAO {

@Query("SELECT * FROM content")

List getAll();

@Query("SELECT * FROM content WHERE id IN (:userIds)")

List loadAllByIds(int[] userIds);

/*@Query("SELECT * FROM user WHERE first_name LIKE :first AND "

+ "last_name LIKE :last LIMIT 1")

Content findByName(String first, String last);

@Insert

void insertAll(Content... users);

@Delete

void delete(Content user);}

Gradle file

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

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:runner:1.0.1'

androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

// ViewModel and LiveData

implementation "android.arch.lifecycle:extensions:1.0.0"

implementation "android.arch.lifecycle:common-java8:1.0.0"

//annotationProcessor "android.arch.lifecycle:compiler:1.0.0"

// Room

implementation "android.arch.persistence.room:runtime:1.0.0"

annotationProcessor "android.arch.persistence.room:compiler:1.0.0"

// Test helpers for Room

testImplementation "android.arch.persistence.room:testing:1.0.0"

}

0
0 Comments

为什么Room显示“AppDatabase_Impl不存在”的错误?

出现这个错误的原因是缺少了以下这行代码:

(entities = [YourEntityClass::class], version = 1)

你需要在你的ROOM数据库类上添加@Database注解,并传入tablesversion参数。

具体代码如下所示:

(entities = [YourEntityClass::class], version = 1)

abstract class YourDatabase : RoomDatabase(){}

这行代码的作用是告诉Room数据库类中的实体类以及数据库的版本号。如果缺少了这行代码,Room将无法正确识别和管理数据库。

解决方法就是在你的ROOM数据库类上添加@Database注解,并传入正确的参数。这样就可以解决“AppDatabase_Impl不存在”的错误了。

0
0 Comments

可能是在更改时文件没有重新生成。尝试重新构建项目:Build -> Rebuild

0