Solucionado (ver solução)
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);
 }