web-dev-qa-db-ja.com

Android Room persistent: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

    }   

}
78
pratik deshai

Kotlinを使用している人は、アプリのbuild.gradleannotationProcessorkaptに変更してみてください。

例えば:

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

また、アプリレベルのbuild.gradleファイルの先頭にapply plugin: 'kotlin-kapt'を追加し、( https://codelabs.developers.google.com/codelabs/によると)クリーンにして再構築します。 Androidの眺めの見える部屋/#6

Android Studioで、コードの貼り付け時またはビルドプロセス中にエラーが発生した場合は、[ビルド]> [プロジェクトのクリーンアップ]を選択します。次に[ビルド]> [プロジェクトの再ビルド]を選択してから、もう一度ビルドします。

154
RWIL

ただ使う

apply plugin: 'kotlin-kapt'

アプリ内build.gradle

そして両方を依存関係に保ってください

annotationProcessor "Android.Arch.persistence.room:compiler:$rootProject.roomVersion"
kapt "Android.Arch.persistence.room:compiler:$rootProject.roomVersion"

EDIT

新しいバージョンでは、一度に両方の依存関係を追加する必要はありません使用するだけでうまくいきます。

kapt 'Android.Arch.persistence.room:compiler:1.1.1'
62
Jahangir Kabir

私が逃したとき私はこのエラーを経験しました

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

上記のアノテーションで指定されたエンティティモデルが特定のモデルクラスを参照していることを確認し、必要なアノテーションも確認します。

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

正しく定義されているとあなたは良いだろう

16
Thadeus Ajayi

依存関係を更新するだけではありません。 Roomの依存関係がすべて同じバージョンであることを確認してください。

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"

上記のサンプルスニペットでは、すべての私のRoom依存関係は同じバージョンを持っています1.1.0-alpha2

8
Idee

データベースを実装するためにkotlinクラスを使用している場合は、

apply plugin: 'kotlin-kapt'

そして

kapt "Android.Arch.persistence.room:compiler:1.1.1"

あなたのgradleファイルで、それは動作します。

7
navalkishoreb

Kotlin開発者向け

これを使って:

implementation "Android.Arch.persistence.room:runtime:1.0.0"
kapt "Android.Arch.persistence.room:compiler:1.0.0"

そして、アプリレベルの最上位にapply plugin: 'kotlin-kapt'を追加しますbuild.gradle

Java開発者向け

implementation "Android.Arch.persistence.room:runtime:1.0.0"
annotationProcessor "Android.Arch.persistence.room:compiler:1.0.0"
6
Pedro Massango

私はaptの依存関係を忘れていたので、私はこの問題に遭遇しました

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を追加して再構築した後、問題は解決しました。

5
ahsiu

私は@Daoアノテーションを忘れているので、私は問題に出会います

@Dao
public interface SearchHistoryDao {
    @Query("SELECT * FROM search_history")
    List<SearchHistory> getAll();

    @Insert
    void insertAll(SearchHistory... histories);

    @Delete()
    void delete(SearchHistory history);
}

Room Official tutorial

4
shellhub

同じ問題がありました。 Android Studioによって作成された新しいサンプルプロジェクトで正式に説明されているように、いくつかのクラスとインターフェースを実装しました。 https://developer.Android.com/training/data-storage/room /

上記のすべての解決策は役に立ちませんでした、私のデータベースクラスに従った必要な_ImplファイルはRoomによって生成されませんでした。最後に、端末でgradle clean buildを実行すると、解決策につながるヒントが得られました。

「警告:スキーマエクスポートディレクトリがアノテーションプロセッサに提供されていないため、スキーマをエクスポートできません。room.schemaLocationアノテーションプロセッサの引数ORを指定してexportSchemaをfalseに設定することもできます。

データベースクラスにパラメータexportSchema = falseを追加しました

@Database(entities = arrayOf(User::class), version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

そしてそれがうまくいった、generatedJavaの下のappモジュールでこれら二つの生成されたファイルを見つけました:

  • AppDatabase_Impl
  • UserDao_Impl

パラメータはオプションであると言われているので、この動作はわかりません。 https://stackoverflow.com/a/44645943/3258117 を参照してください。

2
Hajo

次のリンクを使用してください。

compile 'Android.Arch.persistence.room:runtime:1.0.0-alpha9'
annotationProcessor 'Android.Arch.persistence.room:compiler:1.0.0-alpha9'

あなたはdiffretn singlotonクラスを作成し、このようにtherからAppdatabaseを取得する必要があります。

RoomDB.Java

public class RoomDB {

private static RoomDB INSTANCE;

public static AppDatabase getInstance(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;
}

App.Java

public class App extends Application {

private boolean appRunning = false;

@Override
public void onCreate() {
    super.onCreate();
    RoomDB.getInstance(this); //This will provide AppDatabase Instance
}
2

質問はかなり古いですが、今日私はこれにつまずきましたが、提供された答えのどれも私を助けませんでした。最後に、Google documentation が実際にデフォルトでKotlinではなくJavaにまだ採用されていることに気づくことで解決しました。実際、彼らは無視したコメントを追加しました。

Kotlinの場合、annotationProcessorの代わりにkaptを使用します

だから、代わりに

annotationProcessor "androidx.room:room-compiler:$room_version"

Kotlinで開発している場合は、次を使用する必要があります。

    kapt "androidx.room:room-compiler:$room_version"
2
Pavel

build.gradleのroomに正しい依存関係を追加するようにしてください

ext {
   roomVersion = '2.1.0-alpha06'
}

// Room components
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"

そして一番下の行の下に

apply plugin: 'kotlin-kapt'
1
Deepak

私の場合は、会議室データベースの接続性をテストしていました。AndroidTestフォルダー内に作成したディレクトリ内にテストクラスを配置しました。私はそれをカスタムディレクトリから移動しました、そしてそれはそれでかなりうまくいきました。

1

同じ現象が私にも起こりました。

以下

implementation "Android.Arch.persistence.room:runtime:1.1.1"

追加すると別のビルドエラーが発生しますが、ログから原因を追跡します。

私の場合、SQLの実装にエラーがありました。修正後、ビルドは成功しました。

ですから、クラッシュした地元の人々を見る代わりに、部屋のライブラリ全体の実装をチェックしたいと思うかもしれません。

1
user11221761

問題は、グラドルビルドに含まれていない正しいライブラリに関するものです。私は同様の問題を抱えていたと足りないを追加しました

testImplementation "Android.Arch.persistence.room:testing:$room_version

0
Saurabh Sharma