Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Room Persistence Library run time exception when calling Rooms inMemoryBuilder method

When following the tutorial for setting up the Room persistence library I run in to this error when testing on an Android device.

java.lang.RuntimeException: cannot find implementation for PackageName.AppDatabase. AppDatabase_Impl does not exist

I know a similar question has been asked however the issues were due to kotlin gradle issues. Possible Duplicate

Test class:

@RunWith(AndroidJUnit4.class) public class LocalDatabaseTest {      private PhotoDao mPhotoDao;     private AppDatabase mDb;      @Before     public void createDb() {         Context context = InstrumentationRegistry.getTargetContext();         mDb = Room.inMemoryDatabaseBuilder(context.getApplicationContext(), AppDatabase.class).build();         mPhotoDao = mDb.photoDao();     }      @After     public void closeDb() throws IOException {     //mDb.close(); }      @Test     public void testPreConditions() {         assertNotNull(mDb);    } 

Dao:

    @Dao     public interface PhotoDao {     @Delete()     public void delete(Photo... photos);      @Update     public void update(Photo ... photos);      @Insert     public void insert(Photo ... photos);     } 

Database:

@Database(entities = {Photo.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract PhotoDao photoDao(); } 

Stack Trace:

java.lang.RuntimeException: cannot find implementation for *PackageName*.AppDatabase. AppDatabase_Impl does not exist at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:90) at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:340) at pics.chooz.choozpics.LocalDatabaseTest.createDb(LocalDatabaseTest.java:40) at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59) at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853) 

Gradle:

apply plugin: "com.android.application" apply plugin: "android-apt"  android {     compileSdkVersion 25     buildToolsVersion "25.0.2"      defaultConfig {         applicationId "*Package Name*"         minSdkVersion 16         targetSdkVersion 25         versionCode 50         versionName "1.0.32"         multiDexEnabled true         testInstrumentationRunner     "android.support.test.runner.AndroidJUnitRunner" }  dexOptions {     javaMaxHeapSize "4g" }  buildTypes {     release {         minifyEnabled false         proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"     }     debug {         debuggable true     } }  lintOptions {     abortOnError false     disable "ResourceType" }  sourceCompatibility = 1.7 targetCompatibility = 1.7 compileOptions {     sourceCompatibility JavaVersion.VERSION_1_7     targetCompatibility JavaVersion.VERSION_1_7 }  packagingOptions {     exclude 'META-INF/ASL2.0'     exclude 'META-INF/LICENSE'     exclude 'META-INF/NOTICE' } } dependencies {  androidTestCompile "com.android.support:support-annotations:$androidVersion" androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5'      compile "android.arch.persistence.room:runtime:1.0.0-alpha1"     annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1" } 
like image 362
dxpelou Avatar asked Jun 07 '17 15:06

dxpelou


1 Answers

I changed the 'annotationProcessor' keyword to 'kapt' in my gradle file. Like so:

kapt "android.arch.persistence.room:compiler:1.0.0" 
like image 100
dxpelou Avatar answered Sep 30 '22 05:09

dxpelou