Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Erro Compilation failed; see the compiler error output for details.

Olá estou com um erro no meu aplicativo aqui o código do meu aplicativo

prova.java

@Entity
public class Prova implements Serializable {

    @PrimaryKey(autoGenerate = true)
    private Long id;

    private String materia;

    public String getMateria() {
        return materia;
    }

    public void setMateria(String materia) {
        this.materia = materia;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return materia;
    }
}

alunoDatabase.java

@Database(entities = {Aluno.class, Prova.class}, version = 2)
public abstract class AlunoDatabase extends RoomDatabase {

    public abstract AlunoDao getAlunoDao();

    public abstract ProvaDao getProvaDao();
}

provaDao

@Dao
public interface ProvaDao {

    @Insert
    void insere(Prova prova);

    @Query("select * from Prova")
    List<Prova> busca();

}
10 respostas

formularioalunosfragment.java

public class FormularioAlunosFragment extends Fragment{

    private Aluno aluno = new Aluno();
    private Prova prova = new Prova();

    private EditText campoNome;
    private EditText campoEmail;
    private EditText materia;
    private alunosDelegate delegate;
    public Button cadastrar;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        delegate = (alunosDelegate) getActivity();
        delegate.alteraNomeActivity("Cadastro de Aluno");
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_formulario_alunos, container, false);
        View view_prova = inflater.inflate(R.layout.fragment_formulario_provas, container, false);

        ListView lista = view.findViewById(R.id.fragment_lista);
        ListView lista_prova = view_prova.findViewById(R.id.provas_frame);

        cadastrar = getButton(view);

        ArrayAdapter<Aluno> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1);
        ArrayAdapter<Prova> adapter_Prova = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1);

        configuraComponentes(view);
        listanerBotaoCadastrar(view);

        colocaProvaSeNecessario();
        colocaAlunoSeNecessario();

        return view;
    }

    private void listanerBotaoCadastrar(View view){

        this.materia = view.findViewById(R.id.dash_btn_provas);

        cadastrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alualizaInformacoesProva();

                Gerador_BD gerador_bd = new Gerador_BD();
                ProvaDao provaDao = gerador_bd.gera(getContext()).getProvaDao();

                if(prova.getId() == null){
                    provaDao.insere(prova);
                }

                provaDao.insere(prova);
                delegate.voltaParaTelaAnterior();
            }
        });
    }

    private void alualizaInformacoesProva() {
       prova.setMateria(materia.getText().toString());
    }

    private void colocaProvaSeNecessario(){
        Bundle arguments = getArguments();
        if (arguments != null){
            this.prova = (Prova) arguments.getSerializable("prova");
            materia.setText(prova.getMateria());
        }
    }

    private void colocaAlunoSeNecessario() {
        Bundle arguments = getArguments();
        if (arguments != null){
            this.aluno = (Aluno) arguments.get("aluno");
            campoNome.setText(aluno.getName());
            campoEmail.setText(aluno.getEmail());
        }
    }

    private void configuraComponentes(View view) {
        this.campoNome = view.findViewById(R.id.formulario_alunos_nome);

        this.campoEmail = view.findViewById(R.id.formulario_alunos_email);

        cadastrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                atualizaInformacoesAluno();

                persisteAluno();

                alunosDelegate delegate = (alunosDelegate) getActivity();
                delegate.voltaParaTelaAnterior();
            }
        });
    }

    private Button getButton(View view) {
        return getCadastrar(view, R.id.formulario_alunos_cadastrar);
    }

    private Button getCadastrar(View view, int formulario_alunos_cadastrar) {
        return view.findViewById(formulario_alunos_cadastrar);
    }

    private void persisteAluno() {
        Gerador_BD gerador_bd = new Gerador_BD();

        AlunoDao alunoDao = gerador_bd.gera(getContext()).getAlunoDao();

        if(ehAlunoNovo()){
            alunoDao.insere(aluno);
        }else{
            alunoDao.altera(aluno);
        }
    }

    private boolean ehAlunoNovo() {
        return aluno.getId() == null;
    }

    private void atualizaInformacoesAluno() {
         aluno.setName(campoNome.getText().toString());
         aluno.setEmail(campoEmail.getText().toString());
    }
}

listaAlunosfragment.java

public class ListaAlunosFragment extends Fragment {

    private alunosDelegate delegate;
    private FloatingActionButton botaoAdd;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        delegate = (alunosDelegate) getActivity();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_lista, container, false);

        configuraComponentes(view);

        return view;
    }

    private void configuraComponentes(View view) {
        configuraLista(view);
        configuraFAB(view);
    }

    private void configuraFAB(View view) {
        botaoAdd = view.findViewById(R.id.fragment_lista_fab);

        botaoAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                delegate.lidaComClickFAB();
            }
        });
    }

    private void configuraLista(View view) {

        final ListView lista = configuraProva(view);

        Gerador_BD gerador_bd = new Gerador_BD();
        AlunoDatabase database = gerador_bd.gera(getContext());
        final AlunoDao alunoDao = database.getAlunoDao();

        List<Aluno> alunos = alunoDao.busca();
        final ArrayAdapter<Aluno> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, alunos);
        lista.setAdapter(adapter);

        lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Aluno aluno = (Aluno) lista.getItemAtPosition(position);
                delegate.lidaComAlunoSelecionado(aluno);
            }
        });

        lista.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

                final Aluno aluno = (Aluno) lista.getItemAtPosition(position);

                String mensagem = "Excluir aluno" + aluno.getName() + " ?";
                Snackbar.make(botaoAdd, mensagem, Snackbar.LENGTH_SHORT).setAction("Sim", new View.OnClickListener() { // o metado snackbar ciar um barra embaixo da pela
                    @Override
                    public void onClick(View v) {
                        alunoDao.deleta(aluno);
                        adapter.remove(aluno);
                    }
                }).show();

                return true;
            }
        });

    }

    @NonNull
    private ListView configuraProva(View view) {

        final ListView lista = view.findViewById(R.id.provas_frame);
        Context contexto = getContext();

        Gerador_BD gerador_bd_prova = new Gerador_BD();
        AlunoDatabase database_prova = gerador_bd_prova.gera(contexto);
        ProvaDao provaDao = database_prova.getProvaDao();

        List<Prova> provas = provaDao.busca();
        ArrayAdapter<Prova> adapter_prova = new ArrayAdapter<>(contexto, android.R.layout.simple_list_item_1, provas);

        lista.setAdapter(adapter_prova);

        lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Prova prova = (Prova) lista.getItemAtPosition(position);
                delegate.voltaParaTelaAnterior();
            }
        });

        return lista;
    }

    @Override
    public void onResume() {
        super.onResume();
        delegate.alteraNomeActivity("Lista de Alunos");
    }

Alguém pode ajudar como eu resolvo este erro?

Fala ai Guilherme, de boa ?

Cara como tem muito código aqui, seria interessante termos o erro completo para termos uma ideia do que pode ser.

Se não tiver muita informação, será que pode colocar seu projeto no github para gente analisar ele com mais cuidado ?

Aqui o erro

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugJavaWithJavac'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details.
    at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:50)
    at

Você poderia enviar codigo da aula?

Para em analizar codigo

Oi Guilherme, tudo bem ?

Me manda seu código via github, dessa forma a gente consegue ver onde está errando e podemos melhorar :D

Oi

Manda código da aula para eu verificar.

Aqui está

Agora estou com outro erro quando eu click no adicionar provas, da um erro.

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: br.com.alura.roomapplication, PID: 19451
                  java.lang.RuntimeException: Expecting menu, got android.support.design.widget.CoordinatorLayout
                      at android.support.v7.view.SupportMenuInflater.parseMenu(SupportMenuInflater.java:159)
                      at android.support.v7.view.SupportMenuInflater.inflate(SupportMenuInflater.java:126)
                      at br.com.alura.roomapplication.fragments.ListaProvasFragment.onCreateOptionsMenu(ListaProvasFragment.java:46) <-- aqui a linha do erro

o codigo da class listaprovasfragment

public class ListaProvasFragment extends Fragment {

    private provasDelegate delegate;

    private ListView listagem;
    private FloatingActionButton cadastrar;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        delegate = (provasDelegate) getActivity();
        setHasOptionsMenu(true);
    }

    @SuppressLint("ResourceType")
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.layout.fragment_lista_provas, menu);
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_lista_provas, container, false);

        configuraCampos(view);

        return view;
    }

    private void configuraCampos(View view) {

        configuraListagem(view);

        cadastrar = view.findViewById(R.id.fragment_lista_provas_fab);
        listenerPara(cadastrar);
    }

    private void configuraListagem(View view) {
        listagem = view.findViewById(R.id.fragment_lista_provas);

        Context contexto = getContext();

        Gerador_BD gerador_bd = new Gerador_BD();
        AlunoDatabase database = gerador_bd.gera(contexto);
        final ProvaDao provaDao = database.getProvaDao();

        List<Prova> provas = provaDao.busca();

        final ArrayAdapter<Prova> adapter = configuraAdapter(contexto, provas);

        listagem.setOnItemClickListener(clickNaLista());
    }

    @NonNull
    private ArrayAdapter<Prova> configuraAdapter(Context contexto, List<Prova> provas) {
        final ArrayAdapter<Prova> adapter = new ArrayAdapter<>(contexto, android.R.layout.simple_list_item_1, provas);
        listagem.setAdapter(adapter);
        return adapter;
    }

    private AdapterView.OnItemClickListener clickNaLista() {
        return new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int posicao, long id) {
                Prova prova = (Prova) adapterView.getItemAtPosition(posicao);
                delegate.lidaCom(prova);
            }
        };
    }

    private void listenerPara(FloatingActionButton botaoFlutuante) {
        botaoFlutuante.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                delegate.lidaComClickDoFAB();
            }
        });
    }

    @Override
    public void onResume() {
        super.onResume();
        delegate.alteraNomeActionBar("Provas realizadas");
    }
solução!

Boa noite Guilherme!

No erro está dizendo que ocorreu um erro em tempo de execução, pois o compilador espera inflar um menu e você está passando um CoordinatorLayout.

Veja que no seu onCreateOptionsMenu você está passando o xml errado. Você está passando o layout do fragment da lista de provas, que tem como root view o CoordinatorLayout indicado pelo erro, quando na verdade você deve passar seu R.menu.lista_provas_menu (ou como você nomeou seu menu).

Então seu onCreateOptionsMenu ficaria assim:

@Override
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     super.onCreateOptionsMenu(menu, inflater);
     inflater.inflate(R.menu.lista_provas_menu, menu);
 }