调用Rooms inMemoryBuilder方法时,Room Persistence Library运行时异常

当遵循设置Room持久性库的教程时,我在Android设备上测试时遇到此错误。

java.lang.RuntimeException:找不到PackageName .AppDatabase的实现。 AppDatabase_Impl不存在

我知道有一个类似的问题,但问题是由于kotlin gradle问题。 可能重复

测试课:

@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 public interface PhotoDao { @Delete() public void delete(Photo... photos); @Update public void update(Photo ... photos); @Insert public void insert(Photo ... photos); } 

数据库:

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

堆栈跟踪:

 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) 

摇篮:

 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" } 

当我通过annotationProcessor在gradle文件中替换它时,它工作

 kapt "android.arch.persistence.room:compiler:1.0.0-alpha1" 

看看这个线程

解决方案是取代:

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

与:

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