【问题标题】:Android room shows the error AppDatabase_Impl does not existAndroid机房显示错误AppDatabase_Impl不存在
【发布时间】:2017-12-12 05:10:01
【问题描述】:

我正在开发一个应用程序并为数据库添加空间,但它显示错误是

java.lang.RuntimeException:无法启动活动 组件信息{com.app.android/com.app.android.activities.AttendanceActivity}: java.lang.RuntimeException:找不到实现 com.app.android.db.AppDatabase。 AppDatabase_Impl 不存在

在 gradle 文件中,我添加了所有内容。我的 gradle 文件如下所示。我不知道。问题是什么。此代码正在另一个应用程序中工作。但它显示在此应用程序中。请帮助我。

apply plugin: 'com.android.application'
apply plugin: 'realm-android'
android {
useLibrary 'org.apache.http.legacy'
compileSdkVersion 25
buildToolsVersion '26.0.2'
defaultConfig {
    applicationId 'com.app.android'
    minSdkVersion 14
    targetSdkVersion 25
    versionCode 16
//     edumia   versionCode 16
    versionName "2.0.5"
//       edumia  versionName "2.0.5"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    debug {
        debuggable true
    }
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
productFlavors {
}
}
repositories {
jcenter()
maven {
    url 'https://github.com/uPhyca/stetho-realm/raw/master/maven-repo'
}
maven {
    url 'https://dl.bintray.com/ayz4sci/maven/'
}

}

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

dependencies {
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
compile fileTree(include: ['*.jar'], dir: 'libs')


compile group: 'org.apache.httpcomponents', name: 'httpclient-android', version: '4.3.5.1'

compile 'com.android.support:appcompat-v7:21.0.+'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'
compile 'com.facebook.shimmer:shimmer:0.1.0@aar'
compile 'com.afollestad.material-dialogs:core:0.9.3.0'
compile 'com.afollestad.material-dialogs:commons:0.9.3.0'
compile 'com.facebook.stetho:stetho:1.4.1'
compile 'com.uphyca:stetho_realm:2.0.0'
compile 'com.evernote:android-job:1.1.11'
compile 'com.firebase:firebase-jobdispatcher:0.6.0'
compile 'com.android.support:design:25.0.0'
compile 'com.ss.bannerslider:bannerslider:1.6.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.ayz4sci.androidfactory:downloadprogress:1.0.2'
compile('com.alibaba.android:ultraviewpager:1.0.6@aar') {
    transitive = true
}


compile 'android.arch.lifecycle:extensions:1.0.0-rc1';
compile 'android.arch.persistence.room:runtime:1.0.0-rc1';
annotationProcessor 'android.arch.lifecycle:compiler:1.0.0-rc1';
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0-rc1';
}

MainActivity.java

public class AttendanceActivity extends ActionBarActivity {
    private Class_ class_;
    private AppDatabase database;

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

            database = AppDatabase.getDatabase(getApplicationContext());
            database.classDao().removeAllUsers();

            Class_ aClass = new Class_(1,"model");
            database.classDao().addClass(aClass);

            Log.d(TAG, "added success");

}

AppDatabase.java

public abstract class AppDatabase extends RoomDatabase{

private static AppDatabase INSTANCE;
public abstract ClassDao classDao();
public static AppDatabase getDatabase(Context context) {
    if (INSTANCE == null) {
       INSTANCE =
                Room.databaseBuilder(context, AppDatabase.class, "edumiadatabase")
//Room.inMemoryDatabaseBuilder(context.getApplicationContext(), AppDatabase.class)
                        // To simplify the exercise, allow queries on the main thread.
                        // Don't do this on a real app!
                        .allowMainThreadQueries()
                        // recreate the database if necessary
                        .fallbackToDestructiveMigration()
                        .build();


    }
    return INSTANCE;
}

public static void destroyInstance() {
    INSTANCE = null;
}
}

Class_.java

public class Class_ {
@PrimaryKey
public int id;
public String Class_;


public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getClass_() {
    return Class_;
}

public void setClass_(String class_) {
    Class_ = class_;
}

public Class_(int id, String class_){
    this.id=id;
    this.Class_ = class_;
}
}

ClassDao.java

@Dao
public interface ClassDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void addClass(Class_ user);

    @Query("delete from user")
    void removeAllUsers();

}

【问题讨论】:

  • 看起来您缺少数据库类的 @Database 注释和实体的 @Entity。见developer.android.com/training/data-storage/room/index.html
  • 我添加了@Database@Entity,但它显示另一个错误。
  • 好吗?什么是新错误? Room 需要这些注释才能工作,新错误意味着您现在可以走得更远。作为一个疯狂的猜测,我假设它抱怨delete from user,因为没有这样的表(您的实体将生成一个名为class_ 的表)。我还要注意 Room 1.0.0 已经发布,所以没有理由继续使用 rc1。
  • Error:(8, 8) 错误:实体和 Pojos 必须有一个可用的公共构造函数。您可以有一个空的构造函数或参数与字段匹配的构造函数(按名称和类型)。尝试了以下构造函数,但它们未能匹配: Class_(int,java.lang.String) : [id : id, class_ : null]
  • 你的实体构造函数有一个名为class_的参数,而它设置的字段名为Class_,这两个必须具有相同的名称(区分大小写)。

标签: java android android-room


【解决方案1】:

我在 AppDatabase.java 中添加了@Database(entities = {Class_.class}, version = 1)。数据库类的 @Database 注释和实体的 @Entity。我已经给出了正确的。然后问题就解决了。

【讨论】:

【解决方案2】:

即使在我的

中添加了正确的依赖项后,我也遇到了同样的问题

build.gradle 我的 app 模块。我的问题是,我使用了不同的模块来分离数据库层,我已将我的依赖项移至相应模块的build.gradle 解决了我的问题

希望这对其他人有帮助!!!

【讨论】:

    【解决方案3】:

    @Database 注释丢失

    添加类似这样的注释

    @Database(entities = [Articles::class], version = 1)
    abstract class NewsDatabase : RoomDatabase() {
        abstract fun articlesDao(): ArticlesDao
    }
    

    对于 kotlin 也可以在依赖项中添加以下行

    kapt "android.arch.persistence.room:compiler:1.1.1"
    

    我也在使用 kotlin,我所有的数据类成员都是不可为空的。 在我将它们更改为可空类型后工作正常

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 2018-06-26
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      相关资源
      最近更新 更多