Moja klasa bazy danych aplikacji
@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:+"
A kiedy zapytam na przykład, poda ten błąd, AppDatabase_Impl nie istnieje w mojej klasie aplikacji
public class APp extends Application {
private boolean appRunning = false;
@Override
public void onCreate() {
super.onCreate();
AppDatabase.getAppDatabase(this); //--AppDatabase_Impl does not exist
}
}
java
android
android-room
pratik deshai
źródło
źródło
Odpowiedzi:
Dla osób pracujących z Kotlin , spróbuj zmienić
annotationProcessor
siękapt
w aplikacjachbuild.gradle
na przykład:
pamiętaj również o dodaniu tej wtyczki
na górę pliku build.gradle na poziomie aplikacji i wyczyść go i przebuduj (zgodnie z https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6 )
AKTUALIZACJA
Jeśli przeprowadziłeś migrację do androidx
źródło
apply plugin: 'kotlin-kapt'
na początku poziomu aplikacjibuild.gradle
Po prostu użyj
w aplikacji build.gradle
I trzymaj oba w zależnościach
EDYTOWAĆ
W nowszej wersji nie trzeba dodawać obu zależności na raz. Po prostu użyj, miej nadzieję, że zadziała.
źródło
Miałem ten błąd, kiedy chybiłem
Upewnij się, że model jednostki określony w powyższej adnotacji odnosi się do konkretnej klasy modelu, a także upewnij się, że niezbędna adnotacja:
jest odpowiednio zdefiniowany i byłbyś dobry
źródło
jeśli używasz klas kotlin do implementacji bazy danych, użyj
i
w twoim pliku ocen, to zadziała.
źródło
Nie chodzi tylko o aktualizację zależności. Upewnij się, że wszystkie zależności Room mają tę samą wersję.
W powyższym przykładowym fragmencie wszystkie moje zależności Room mają tę samą wersję
1.1.0-alpha2
źródło
Dla programistów Kotlin
Użyj tego:
I dodaj
apply plugin: 'kotlin-kapt'
na górę poziomu aplikacjibuild.gradle
.Dla programistów Java
źródło
Spotkałem się z tym problemem, ponieważ zapomniałem o trafnych zależnościach
po dodaniu annotationProcessor i przebudowie go problem został rozwiązany.
źródło
Spotykam się z problemem, bo zapominam o
@Dao
adnotacjiOficjalny samouczek dotyczący pokoju
źródło
upewnij się, że dodano poprawną zależność dla pokoju w pliku build.gradle
A poniżej linii u góry
źródło
Pytanie jest dość stare, ale natknąłem się na to dzisiaj i żadna z udzielonych odpowiedzi mi nie pomogła. W końcu udało mi się to rozwiązać, zauważając, że dokumentacja google faktycznie jest nadal adoptowana do Javy, a nie domyślnie Kotlina, w rzeczywistości dodali komentarz, który zignorowałem
Więc zamiast
annotationProcessor "androidx.room:room-compiler:$room_version"
Jeśli rozwijasz się z Kotlinem, powinieneś użyć:
źródło
Miałem ten sam problem. Zaimplementowałem kilka klas i interfejs, jak oficjalnie powiedziano w nowym przykładowym projekcie stworzonym przez Android Studio: https://developer.android.com/training/data-storage/room/
Wszystkie powyższe rozwiązania nie pomogły, potrzebne pliki _Impl zgodnie z moją klasą bazy danych nie zostały wygenerowane przez Room. Wreszcie wykonanie kompilacji gradle clean w terminalu dało mi wskazówkę prowadzącą do rozwiązania:
„ostrzeżenie: katalog eksportu schematu nie jest dostarczany do procesora adnotacji, więc nie możemy wyeksportować schematu. Możesz albo podać
room.schemaLocation
argument procesora adnotacji LUB ustawić exportSchema na false.”Dodałem parametr exportSchema = false w klasie bazy danych
A potem zadziałało, znalazłem te dwa wygenerowane pliki w module aplikacji w obszarze generatedJava:
Nie rozumiem tego zachowania, ponieważ mówi się, że parametr jest opcjonalny, patrz https://stackoverflow.com/a/44645943/3258117
źródło
Użyj następującego linku do gradle:
Musisz stworzyć diffretn singloton class i pobrać bazę danych aplikacji od takich osób:
RoomDB.java
App.java
źródło
W moim przypadku testowałem łączność z bazą danych pokoi i umieściłem klasę testującą w katalogu, który utworzyłem, w folderze AndroidTest. Przeniosłem go z katalogu niestandardowego, a potem działał całkiem dobrze.
źródło
TestDatabase
w kodzie wydania.Przyszło mi do głowy to samo zjawisko.
następujący
Dodanie powoduje kolejny błąd kompilacji, ale śledzi przyczynę w dzienniku.
W moim przypadku wystąpił błąd w implementacji SQL. Po naprawieniu kompilacja przebiegła pomyślnie.
Możesz więc chcieć sprawdzić implementację całej biblioteki pokoju, zamiast patrzeć na rozbitych mieszkańców.
źródło
Problem jest bardziej związany z poprawną biblioteką, która nie jest zawarta w kompilacji Gradle. Miałem podobny problem i dodałem brakujący
źródło
Zmiana zależności w moim pliku gradle nie pomogła mi w naprawieniu błędu. Przegapiłem tę adnotację bazy danych w klasie, w której zainicjowano bazę danych pokoju, co było przyczyną tego problemu.
Upewnij się, że model jednostki określony w powyższej adnotacji odnosi się do określonej klasy modelu
źródło
Dla mnie Android Studio automatycznie aktualizuje zależności, gdy tylko dołączysz dowolny import związany z bazą danych Room. Ale zgodnie z https://developer.android.com/jetpack/androidx/releases/room#declaring_dependencies , musisz zaktualizować kilka. Oto jak wygląda moja baza kodu:
AppDatabase.kt
Zaktualizuj plik build.gradle zgodnie z jedną z odpowiedzi:
Zsynchronizuj gradle i powinieneś być gotowy.
źródło
Czytając przykład tutaj: Przykład pokoju
Naprawiłem ten błąd, używając poprawnej (chyba tak) adnotacjiProcessorFile, w następujący sposób:
Ponadto zaktualizowałem do 2.2.0 zarówno w wersji Room, jak w wersji Lifecycle.
Po zsynchronizowaniu graddle mogłem rozpocząć pracę z Room.
Więc powodzenia! I niech kod będzie z tobą!
źródło
W mojej aplikacji kotlin właśnie dodałem następujący wiersz na górze mojego pliku build.gradle:
I następujący wiersz w sekcji zależności:
Mam nadzieję, że to rozwiąże Twój problem.
źródło
Nie w przypadku OP, ale dzieje się tak również wtedy, gdy omyłkowo użyjesz implementacji zamiast procesora adnotacji w ten sposób:
Zamiast tego:
źródło