首页 > 解决方案 > 错误:不兼容的类型:SupportSQLiteDatabase 无法转换为 AppDatabase

问题描述

我正在尝试将 Room 持久性库包含到我的 android 项目中。我正在使用 gradle 依赖android.arch.persistence.room:runtime:1.1.1库,而不是androidx

我尝试将版本更改为1.1.0&1.1.0-beta2但得到相同的错误。

房间的 Gradle 依赖项:

// Room components implementation "android.arch.persistence.room:runtime:$rootProject.roomVersion" annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion" androidTestImplementation "android.arch.persistence.room:testing:$rootProject.roomVersion"

这里$rootProject.roomVersion的价值是1.1.1

支持库版本:

`implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'`

AppDatabase 类:

import android.arch.persistence.room.Database;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.RoomDatabase;
import android.content.Context;
import com.samcaraschools.userlistapp.module.User;
@Database(entities = {User.class},version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
    public static AppDatabase mDatabase;
    public abstract UserDao userDao();

    public static AppDatabase getAppDatabase(Context context) {
        if (mDatabase == null) {
            synchronized (AppDatabase.class) {
                if (mDatabase == null) {
                    mDatabase = Room.databaseBuilder(context.getApplicationContext(),
                            AppDatabase.class, "word_database")
                            // Wipes and rebuilds instead of migrating
                            // if no Migration object.
                            // Migration is not part of this practical.
                            .fallbackToDestructiveMigration()
                            .build();
                }
            }
        }
        return mDatabase;
    }
}

使用上面的代码,我收到以下错误:

error: incompatible types: SupportSQLiteDatabase cannot be converted to AppDatabase 我的代码有什么问题?

标签: android-room

解决方案


错误是因为 AppDatabase 类的对象的名称。将其重命名为 mDatabase 以外的任何对象名称,然后它将正常运行。

如果您检查您的 AppDatabase_Impl.java,您会注意到 mDatabase 有错误。这是因为 SupportSQLiteDatabase.java 具有对象名称 mDatabase,它被放置在 AppDatabase 中的对象名称覆盖。


推荐阅读