[java] Android 룸 지속성 : AppDatabase_Impl이 존재하지 않습니다.

내 앱 데이터베이스 클래스

@Database(entities = {Detail.class}, version = Constant.DATABASE_VERSION)
public abstract class AppDatabase extends RoomDatabase {

    private static AppDatabase INSTANCE;

    public abstract FavoritesDao favoritesDao();

    public static AppDatabase getAppDatabase(Context context) {
        if (INSTANCE == null) {
            INSTANCE =
                    Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, Constant.DATABASE).allowMainThreadQueries().build();

                    //Room.inMemoryDatabaseBuilder(context.getApplicationContext(),AppDatabase.class).allowMainThreadQueries().build();
        }
        return INSTANCE;
    }

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

Gradle lib :

 compile "android.arch.persistence.room:runtime:+"
 annotationProcessor "android.arch.persistence.room:compiler:+"

그리고 예를 들어 요청할 때이 오류가 발생합니다. 응용 프로그램 클래스에 AppDatabase_Impl이 없습니다.

public class APp extends Application {

    private boolean appRunning = false;

    @Override
    public void onCreate() {
        super.onCreate();
        AppDatabase.getAppDatabase(this); //--AppDatabase_Impl does not exist

    }

}



답변

작업 사람들을 위해 코 틀린 변화 시도 annotationProcessorkapt애플 리케이션에build.gradle

예를 들면 다음과 같습니다.

// Extensions = ViewModel + LiveData
implementation "android.arch.lifecycle:extensions:1.1.0"
kapt "android.arch.lifecycle:compiler:1.1.0"
// Room
implementation "android.arch.persistence.room:runtime:1.0.0"
kapt "android.arch.persistence.room:compiler:1.0.0"

이 플러그인을 추가해야합니다

apply plugin: 'kotlin-kapt'

깨끗한을하고 다시 응용 프로그램 레벨 build.gradle 파일의 상단에와 (에 따라 https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6 )

Android Studio에서 코드를 붙여 넣거나 빌드 프로세스 중에 오류가 발생하면 빌드> 프로젝트 정리를 선택하십시오. 그런 다음 빌드> 프로젝트 다시 빌드를 선택한 다음 다시 빌드하십시오.


최신 정보

androidx로 마이그레이션 한 경우

def room_version = "2.2.3" // check latest version from docs

implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"


답변

그냥 사용

apply plugin: 'kotlin-kapt'

앱 build.gradle에서

그리고 의존성을 유지하십시오

annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"
kapt "android.arch.persistence.room:compiler:$rootProject.roomVersion"

편집하다

최신 버전에서는 한 번에 두 가지 종속성을 모두 추가 할 필요가 없습니다. 그냥 사용하십시오.

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


답변

보고 싶을 때이 오류가 발생했습니다

@Database(entity="{<model.class>})

위 주석에 지정된 엔티티 모델이 특정 모델 클래스를 참조하는지 확인하고 필요한 주석이 있는지 확인하십시오.

@Entity(tableName = "<table_name>" ...)

제대로 정의되었고 당신은 좋을 것입니다


답변

kotlin 클래스를 사용하여 데이터베이스를 구현하는 경우

apply plugin: 'kotlin-kapt'

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

gradle 파일에서 작동합니다.


답변

의존성을 업데이트하는 것이 아닙니다. 모든 룸 종속성이 동일한 버전인지 확인하십시오.

implementation 'android.arch.persistence.room:rxjava2:1.1.0-alpha2'
implementation 'android.arch.persistence.room:runtime:1.1.0-alpha2'
annotationProcessor "android.arch.persistence.room:compiler:1.1.0-alpha2"

위의 샘플 스 니펫에서 모든 내 룸 종속성의 버전이 동일합니다 1.1.0-alpha2


답변

코 틀린 개발자를위한

이것을 사용하십시오 :

implementation "android.arch.persistence.room:runtime:1.0.0"
kapt "android.arch.persistence.room:compiler:1.0.0"

그리고 apply plugin: 'kotlin-kapt'앱 레벨 상단에 추가하십시오 build.gradle.

자바 개발자

implementation "android.arch.persistence.room:runtime:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"


답변

나는 적절한 의존성을 잊어 버렸기 때문에이 문제를 만났습니다.

implementation "android.arch.lifecycle:extensions:$archLifecycleVersion"
implementation "android.arch.persistence.room:runtime:$archRoomVersion"
annotationProcessor "android.arch.lifecycle:compiler:$archLifecycleVersion"
annotationProcessor "android.arch.persistence.room:compiler:$archRoomVersion"

annotationProcessor를 추가하고 다시 빌드하면 문제가 해결되었습니다.