Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DatabaseManager_Impl is not abstract and does not override abstract method clearAllTables() in RoomDatabase

When I have built this code, it showed build error:

DatabaseManager_Impl is not abstract and does not override abstract method clearAllTables() in RoomDatabase.

build.gradle:

implementation 'android.arch.persistence.room:runtime:1.0.0'
kapt 'android.arch.persistence.room:compiler:1.0.0'
implementation 'android.arch.persistence.room:rxjava2:1.0.0'
implementation 'android.arch.persistence.room:guava:1.1.0-beta3'

Database implementation as per Room guidance:

@Database(entities = {Task.class}, version = 1)
public abstract class DatabaseManager extends RoomDatabase {
    private static final String DATABASE =
                         Iterables.getLast(Splitter.on(".").trimResults().split(BuildConfig.APPLICATION_ID)).concat("-db");
    private static volatile DatabaseManager instance;

    public abstract TaskDao taskDao();

    synchronized public static DatabaseManager onInstance(Context context)     {
        if (instance == null) {
            instance = newInstance(context, false);
        }
        return instance;
    }

    public static DatabaseManager newInstance(Context context, boolean memoryOnly) {
        RoomDatabase.Builder<DatabaseManager> builder;

        if (memoryOnly) {
            builder = Room.inMemoryDatabaseBuilder(context.getApplicationContext(), DatabaseManager.class);
        } else {
            builder = Room.databaseBuilder(context.getApplicationContext(), DatabaseManager.class, DATABASE);
        }

        return builder.fallbackToDestructiveMigration().build();
    }

}
like image 971
Roman Avatar asked Apr 29 '18 08:04

Roman


2 Answers

The fix for me was to change all of room libraries versions to 1.0.0

Also make sure to use kapt instead of annotationProccessor!

like image 87
Szymon Wysocki Avatar answered Nov 09 '22 07:11

Szymon Wysocki


I had the same issue and realized that

//room
    implementation "android.arch.persistence.room:runtime:${arch_version}"
    kapt "android.arch.persistence.room:compiler:${arch_version}"
    implementation "android.arch.persistence.room:rxjava2:${arch_version}"

These dependencies should have the same version. Either they are all 1.0.0 or 1.1.0. Different versions will cause problems.

like image 19
Debanjan Avatar answered Nov 09 '22 07:11

Debanjan