私のアプリデータベースクラス
@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
}
}
Kotlinを使用している人は、アプリのbuild.gradle
でannotationProcessor
をkapt
に変更してみてください。
例えば:
// 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で、コードの貼り付け時またはビルドプロセス中にエラーが発生した場合は、[ビルド]> [プロジェクトのクリーンアップ]を選択します。次に[ビルド]> [プロジェクトの再ビルド]を選択してから、もう一度ビルドします。
ただ使う
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'
私が逃したとき私はこのエラーを経験しました
@Database(entity="{<model.class>})
上記のアノテーションで指定されたエンティティモデルが特定のモデルクラスを参照していることを確認し、必要なアノテーションも確認します。
@Entity(tableName = "<table_name>" ...)
正しく定義されているとあなたは良いだろう
依存関係を更新するだけではありません。 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
データベースを実装するためにkotlinクラスを使用している場合は、
apply plugin: 'kotlin-kapt'
そして
kapt "Android.Arch.persistence.room:compiler:1.1.1"
あなたのgradleファイルで、それは動作します。
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"
私は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を追加して再構築した後、問題は解決しました。
私は@Dao
アノテーションを忘れているので、私は問題に出会います
@Dao
public interface SearchHistoryDao {
@Query("SELECT * FROM search_history")
List<SearchHistory> getAll();
@Insert
void insertAll(SearchHistory... histories);
@Delete()
void delete(SearchHistory history);
}
同じ問題がありました。 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モジュールでこれら二つの生成されたファイルを見つけました:
パラメータはオプションであると言われているので、この動作はわかりません。 https://stackoverflow.com/a/44645943/3258117 を参照してください。
次のリンクを使用してください。
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
}
質問はかなり古いですが、今日私はこれにつまずきましたが、提供された答えのどれも私を助けませんでした。最後に、Google documentation が実際にデフォルトでKotlinではなくJavaにまだ採用されていることに気づくことで解決しました。実際、彼らは無視したコメントを追加しました。
Kotlinの場合、annotationProcessorの代わりにkaptを使用します
だから、代わりに
annotationProcessor "androidx.room:room-compiler:$room_version"
Kotlinで開発している場合は、次を使用する必要があります。
kapt "androidx.room:room-compiler:$room_version"
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'
私の場合は、会議室データベースの接続性をテストしていました。AndroidTestフォルダー内に作成したディレクトリ内にテストクラスを配置しました。私はそれをカスタムディレクトリから移動しました、そしてそれはそれでかなりうまくいきました。
同じ現象が私にも起こりました。
以下
implementation "Android.Arch.persistence.room:runtime:1.1.1"
追加すると別のビルドエラーが発生しますが、ログから原因を追跡します。
私の場合、SQLの実装にエラーがありました。修正後、ビルドは成功しました。
ですから、クラッシュした地元の人々を見る代わりに、部屋のライブラリ全体の実装をチェックしたいと思うかもしれません。
問題は、グラドルビルドに含まれていない正しいライブラリに関するものです。私は同様の問題を抱えていたと足りないを追加しました
testImplementation "Android.Arch.persistence.room:testing:$room_version