Androidルーム永続:AppDatabase_Implは存在しません

160
pratik deshai 2017-10-11 01:29.

私のアプリデータベースクラス

@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

    }   

}

21 answers

326
RWIL 2018-03-17 05:08.

Kotlinを使用しannotationProcessorている場合kaptは、アプリでに変更してみてください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"
82
Jahangir Kabir 2018-05-21 22:05.

使用するだけ

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'
23
Thadeus Ajayi 2018-04-19 04:37.

私が逃したときに私はこのエラーがありました

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

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

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

適切に定義されていて、あなたは良いでしょう

19
navalkishoreb 2019-07-08 23:25.

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

apply plugin: 'kotlin-kapt'

そして

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

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

12
Pedro Massango 2018-11-08 00:10.

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"
11
Idee 2018-03-15 04:06.

依存関係を更新するだけではありません。すべての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

7
ahsiu 2018-01-25 01:09.

私は適切な依存関係を忘れたので、この問題に遭遇しました

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

7
shellhub 2018-11-10 22:06.

@Dao注釈を忘れたので問題に直面します

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

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

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

部屋の公式チュートリアル

7
Deepak 2019-06-11 21:53.

build.gradleの部屋に正しい依存関係を追加してください

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'
6
Hajo 2018-11-24 04:27.

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

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

「警告:スキーマエクスポートディレクトリが注釈プロセッサに提供されていないため、スキーマをエクスポートできません。room.schemaLocation注釈プロセッサの引数を指定するか、exportSchemaをfalseに設定してください。」

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

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

そしてそれは機能し、generateJavaの下のappモジュールでこれらの2つの生成されたファイルを見つけました:

  • AppDatabase_Impl
  • UserDao_Impl

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

5
Pavel 2019-06-18 07:19.

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

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

だから、代わりに

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

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

    kapt "androidx.room:room-compiler:$room_version"
3
Burhanuddin Rashid 2017-10-11 01:37.

次のgradleリンクを使用します。

compile 'android.arch.persistence.room:runtime:1.0.0-alpha9'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0-alpha9'

diffretn singlotonクラスを作成し、次のように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
Farruh Habibullaev 2018-08-23 10:22.

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

2
user11221761 2019-03-19 06:07.

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

以下

implementation "android.arch.persistence.room:runtime:1.1.1"

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

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

したがって、クラッシュしたローカルを調べるのではなく、ルームライブラリ全体の実装を確認することをお勧めします。

1
Saurabh Sharma 2018-12-30 21:56.

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

testImplementation "android.arch.persistence.room:testing:$ room_version

1
Wajhia Maqsood 2019-11-25 20:49.

Gradleファイルの依存関係を変更しても、エラーを修正するのに役立ちませんでした。Roomデータベースが初期化されたクラスで、このDatabaseアノテーションを見逃していたため、この問題が発生していました。

@Database(entities = [UserModel :: class]、version = 1)

上記の注釈で指定されたエンティティモデルが特定のモデルクラスを参照していることを確認してください

1
ZakariaBK 2020-03-20 11:05.

kotlinアプリで、build.gradleファイルの先頭に次の行を追加しました。

apply plugin: 'kotlin-kapt'

そして、依存関係セクションの次の行:

kapt "androidx.room:room-compiler:2.2.5"

問題が解決することを願っています。

1
hamid 2020-11-17 00:21.

Kotlin開発者向け


DaoとEntityを確認し、Kaptも使用していて問題がない場合、kotlin 1.4以降を使用していると、kotlinのバージョンに問題があると思います。このリンクからRoomを最新バージョンに更新します。


2.3.0-alpha03は私の問題を解決しました。

0
Rujoota Shah 2020-01-09 17:07.

私の場合、Android Studioは、Roomデータベース関連のインポートを含めるとすぐに、依存関係を自動的に更新しました。ただし、https://developer.android.com/jetpack/androidx/releases/room#declaring_dependenciesに従って、いくつか更新する必要があります。これが私のコードベースがどのように見えるかです:

AppDatabase.kt

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

@Database(entities = arrayOf(MyEntity::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun myDAO(): MyDAO

    companion object {
        @Volatile private var instance: AppDatabase? = null
        private val LOCK = Any()

        operator fun invoke(context: Context)= instance ?: synchronized(LOCK){
            instance ?: buildDatabase(context).also { instance = it}
        }

        private fun buildDatabase(context: Context) = Room.databaseBuilder(context,
            AppDatabase::class.java, "db-name.db")
            .build()
    }
}

回答の1つで指定されているようにbuild.gradleを更新します。

apply plugin: 'kotlin-kapt' // this goes with other declared plugin at top
dependencies { // add/update the following in dependencies section
    implementation 'androidx.room:room-runtime:2.2.3'
//    annotationProcessor 'androidx.room:room-compiler:2.2.3' // remove this and use the following
    kapt "androidx.room:room-compiler:2.2.3"

}

Gradleを同期すると、準備が整います。

0
Anibal Itriago 2020-03-11 12:22.

ここで例を読む: 部屋の例

次のように、正しい(おそらくそうだと思います)annotationProcessorFileを使用してこのエラーを修正しました。

annotationProcessor "android.arch.persistence.room:compiler:<latest_version>"

また、ライフサイクルバージョンと同様にルームバージョンでも2.2.0にアップグレードしました。

graddleを同期すると、Roomでの作業を開始できます。

とても幸運!そして、コードをあなたと一緒にしましょう!

0
artenson.art98 2020-06-26 23:57.

OPの場合ではありませんが、これは、次のように、annotationProcessorの代わりに実装を誤って使用した場合にも発生します。

implementation "android.arch.persistence.room:compiler:x.x.x"

これの代わりに:

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

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

控訴裁判所によって取り下げられたメタン規制の施行を遅らせるEPAの試み

控訴裁判所によって取り下げられたメタン規制の施行を遅らせるEPAの試み

ゲッティ経由の画像。スコット・プルイットは環境保護庁の長であり、二酸化炭素とメタンガスとの愛情のこもった関係を持っていますが、彼は地球温暖化を信じることに冷たい肩を与えています。

メッセージングアプリの「誰かが入力している」バブルが実際に意味するもの

メッセージングアプリの「誰かが入力している」バブルが実際に意味するもの

一連の点滅する省略記号であろうと、「誰かが入力している」という明示的な通知であろうと、入力インジケーターと呼ばれるメッセージング機能は、多くの人にとって便利なツールであり、不安の原因でもあります。しかし、それがどのように機能するかについてもっと知ることは、少なくとも私たちにストレスを引き起こす推測ゲームを制限することができます。

マット・ラウアーは、離婚の和解で数百万ドルと馬の農場を失うことに「激怒」したと伝えられています

マット・ラウアーは、離婚の和解で数百万ドルと馬の農場を失うことに「激怒」したと伝えられています

マット・ラウアーと彼の妻のアネット・ロークは結婚間近であり、離婚手続きが激化していると伝えられています。ある情報筋は、ラウアーが「和解で約5,000万ドルをフォークする予定」であり、「マットは激怒している」と語った。彼は本質的に彼の純資産の半分をアネットに手渡している。

まあ、これは厄介です:レイプ告発者はケレンウィンズロージュニアの弁護士を彼女の攻撃者として特定します

まあ、これは厄介です:レイプ告発者はケレンウィンズロージュニアの弁護士を彼女の攻撃者として特定します

2018年6月15日金曜日、カリフォルニア州ビスタでの罪状認否の際、元NFLフットボール選手のケレンウィンズロージュニア(中央)が弁護士のブライアンワトキンス(左)とハーベイスタインバーグの後ろに立っています。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

投資ノート:Bioscout AU$300万シード

投資ノート:Bioscout AU$300万シード

Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。

ムーアの法則を超えて

ムーアの法則を超えて

計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。

Language