1
resposta

Intancia do DAO

O método utilizado para pegar a instancia do DAO não parece o mais adequado, alguém poderia me dizer se existe outra forma para essa implementação para pegar a instância do DAO ?

Vou tentar explicar um pouco mais Temos três classes abaixo uma é a AgendaDataBase que é uma classe abstrata, e possui um método abstrato até ai, Ok, porém esse método abstrato de alguma forma muito loca que eu não entendi retorna a instancia da classe RoomAlunoDao, Alguém pode me explicar como isso ocorre?

@Dao public interface RoomAlunoDAO { @Insert void salva(Aluno aluno);

@Query("SELECT * FROM aluno")
List<Aluno> todos();

@Delete
void remove(Aluno aluno);

}

@Database(entities = {Aluno.class}, version = 1, exportSchema = false) public abstract class AgendaDatabase extends RoomDatabase { public abstract RoomAlunoDAO getRoomAlunoDAO(); }

public class AgendaApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();
    criaAlunosDeTeste();
}

private void criaAlunosDeTeste() {
    AgendaDatabase database = Room
            .databaseBuilder(this, AgendaDatabase.class, "agenda.db")
            .build();
    RoomAlunoDAO dao = database.getRoomAlunoDAO();
    dao.salva(new Aluno("Alex", "1122223333", "alex@alura.com.br"));
    dao.salva(new Aluno("Fran", "1122223333", "fran@gmail.com"));
}

}

1 resposta

Oi Anderson, tudo bem?

Não sei se entendi a sua dúvida com precisão, você quer como o Room cria a instância de AgendaDatabase a partir do buider considerando todas as classes de configuração? Se sim, você pode buscar por uma classe chamada de AgendaDatabase_Impl que é o código gerado pelo annotation processor.

Esse é um código complexo que é feito automaticamente justamente para evitar toda essa complicação para quem está escrevendo o código.

[]s