1
resposta

Faltando argumentos para o RoomAlunoDAO

No arquivo AgendaApplication na linha 32 estou recebendo erro de falta de argumentos

RoomAlunoDAO dao = database.getRoomAlunoDAO();

Porém seguindo o código do curso estou dentro do que está sendo ensinado, e o código do curso é compilado em vídeo.

https://github.com/thirofer/AluraAgendaRoom

Subi o código pro repositório, do github mas vou deixar meu código aqui, caso consigam ajudar a solucionar.

package alura.com.br;

import android.app.Application;
import android.arch.persistence.room.Room;


import alura.com.br.dao.AlunoDAO;
import alura.com.br.database.AgendaDatabase;
import alura.com.br.database.dao.RoomAlunoDAO;
import alura.com.br.ui.activity.model.Aluno;

public class AgendaApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        criaAlunosDeTeste();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    private void criaAlunosDeTeste() {
        //Uso do Room
        AgendaDatabase database = Room
                .databaseBuilder(this, AgendaDatabase.class, "agenda.db")
                .allowMainThreadQueries()
                .build();
        RoomAlunoDAO dao = database.getRoomAlunoDAO();
        // Uso sem DAO, manual
        //AlunoDAO dao = new AlunoDAO();
        dao.salva(new Aluno("Thiago", "22222222", "abc@abc.com"));
        dao.salva(new Aluno("Aluno 2", "33333333", "def@abc.com"));
        dao.salva(new Aluno("Alex", "1122223333", "alex@alura.com.br"));
        dao.salva(new Aluno("Fran", "1122223333", "fran@gmail.com"));
    }
}
1 resposta

O erro ocorre porque você está chamando o método getRoomAlunoDAO() do objeto database sem passar nenhum argumento.

Uma possível solução para esse problema é adicionar o contexto como argumento na criação do objeto database. Para isso, você pode modificar a linha onde você constrói o objeto database da seguinte forma:

AgendaDatabase database = Room
        .databaseBuilder(this, AgendaDatabase.class, "agenda.db")
        .allowMainThreadQueries()
        .build();

Dessa forma, o contexto da aplicação será passado para o método databaseBuilder(), permitindo que você chame o método getRoomAlunoDAO() sem problemas.