Classe do banco de dados do meu aplicativo
@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:+"
E quando eu pedir, por exemplo, ele dará esse erro, AppDatabase_Impl não existe na minha classe de aplicativo
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
fonte
fonte
Respostas:
Para aqueles que trabalham com Kotlin , tente mudar
annotationProcessor
parakapt
nos aplicativosbuild.gradle
por exemplo:
lembre-se de adicionar este plugin
na parte superior do arquivo build.gradle no nível do aplicativo e faça uma limpeza e reconstrução (de acordo com https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6 )
ATUALIZAR
Se você migrou para o androidx
fonte
apply plugin: 'kotlin-kapt'
ao topo do nível de aplicativobuild.gradle
arquivoApenas use
no aplicativo build.gradle
E mantenha ambos em dependências
EDITAR
Na versão mais recente, não é necessário adicionar as duas dependências por vez. Basta usar, espero que funcione.
fonte
Eu tive esse erro quando perdi
Certifique-se de que o modelo de entidade especificado na anotação acima se refira à classe de modelo específica e também garanta que a anotação necessária:
está definido corretamente e você seria bom
fonte
Se você estiver usando classes kotlin para implementar banco de dados, use
e
no seu arquivo gradle, ele funcionará.
fonte
Não se trata apenas de atualizar suas dependências. Verifique se todas as dependências da sala têm a mesma versão.
No snippet de amostra acima, todas as minhas dependências da sala têm a mesma versão
1.1.0-alpha2
fonte
Para desenvolvedores Kotlin
Usa isto:
E adicione
apply plugin: 'kotlin-kapt'
ao topo do nível do aplicativobuild.gradle
.Para desenvolvedores Java
fonte
Encontrei esse problema porque esqueci as dependências do apt
depois de adicionar o annotationProcessor e reconstruí-lo, o problema foi resolvido.
fonte
Eu me deparo com o problema, porque esqueci a
@Dao
anotaçãoTutorial oficial da sala
fonte
certifique-se de adicionar a dependência correta para o espaço no build.gradle
E abaixo da linha no topo
fonte
A pergunta é bem antiga, mas eu me deparei com isso hoje e nenhuma das respostas fornecidas me ajudou. Finalmente, consegui resolvê-lo percebendo que a documentação do Google ainda é adotada no Java e não no Kotlin por padrão. Na verdade, eles adicionaram um comentário que eu ignorei
Então, ao invés de
annotationProcessor "androidx.room:room-compiler:$room_version"
Se você estiver desenvolvendo com o Kotlin, use:
fonte
Teve o mesmo problema. Implementou as poucas classes e interfaces conforme oficialmente relatadas em um novo projeto de exemplo criado pelo Android Studio: https://developer.android.com/training/data-storage/room/
Todas as soluções mencionadas acima não ajudaram, os arquivos _Impl necessários de acordo com a minha classe de banco de dados não foram gerados pelo Room. Finalmente, a execução de gradle clean build no terminal deu-me a dica que levou à solução:
"aviso: o diretório de exportação do esquema não é fornecido ao processador de anotações, portanto não podemos exportar o esquema. Você pode fornecer o
room.schemaLocation
argumento do processador de anotações OU definir exportSchema como false."Adicionei o parâmetro exportSchema = false na classe de banco de dados
E então funcionou, encontrou esses dois arquivos gerados no módulo de aplicativo em generateJava:
Eu não entendo esse comportamento, pois o parâmetro é opcional, consulte https://stackoverflow.com/a/44645943/3258117
fonte
Use o seguinte link gradle:
Você precisa criar diferentes classes de singlotons e obter o Appdatabase a partir desta forma:
RoomDB.java
App.java
fonte
No meu caso, eu estava testando a conectividade para o banco de dados da sala e coloquei a classe de teste dentro do diretório que criei na pasta AndroidTest. Mudei para fora do diretório personalizado e funcionou muito bem.
fonte
TestDatabase
no código de lançamento.O mesmo fenômeno me ocorreu.
Segue
A adição causa outro erro de construção, mas rastreia a causa no log.
No meu caso, houve um erro na implementação do SQL. Após a correção, a compilação foi bem-sucedida.
Portanto, convém verificar a implementação de toda a biblioteca da sala, em vez de examinar os locais afetados.
fonte
O problema é mais sobre a biblioteca correta que não está incluída na compilação gradle. Eu tive um problema semelhante e adicionei o item ausente
fonte
Alterar as dependências no meu arquivo gradle não me ajudou a corrigir o erro. Eu havia perdido essa anotação de banco de dados na classe em que o banco de dados da sala foi inicializado, causando o problema.
Verifique se o modelo de entidade especificado na anotação acima se refere à classe de modelo específica
fonte
Para mim, o Android Studio atualizou automaticamente as dependências assim que você incluir qualquer importação relacionada ao banco de dados da sala. Mas, de acordo com https://developer.android.com/jetpack/androidx/releases/room#declaring_dependencies, você precisa atualizar alguns. Aqui está como minha base de código se parece:
AppDatabase.kt
Atualize o build.gradle conforme especificado em uma das respostas:
Sincronize o gradle e você deve estar pronto.
fonte
Lendo o exemplo aqui: Exemplo de Sala
Corrigi esse erro usando apenas o correto (acho que é) annotationProcessorFile, da seguinte maneira:
Além disso, atualizei para o 2.2.0 na versão Room ou na versão Lifecycle.
Depois de sincronizar a grade, eu poderia começar a trabalhar com o Room.
Então boa sorte! E deixe o código estar com você!
fonte
No meu aplicativo kotlin, acabei de adicionar a seguinte linha na parte superior do meu arquivo build.gradle:
E a seguinte linha na seção de dependências:
Espero que isso resolva seu problema.
fonte
Não no caso do OP, mas isso também acontece quando você usa a implementação por engano em vez do annotationProcessor como este:
Em vez disso:
fonte