Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não completa ação de salvar ao clicar no botãoSalvar.

Boa tarde.

Minha aplicação está apresentando erro ao clicar no botão Salvar. O App no emulador fecha instantaneamente.

Percebi que no final do primeiro vídeo da unidade 5, o botaoSalvar.OnClickListener está implementado de uma forma, mas no início do segundo vídeo da mesma unidade, o método está declarado de outra forma.

Será que pode ter alguma relação? Meu código está tal qual o primeiro exemplo, demonstrado no primeiro vídeo da Unidade 5.

Acredito que já tenha revisado tudo, mas não consigo identificar o possível problema.

Att. Igor Klein

3 respostas
solução!

Oi Igor, tudo bem?

Consegue compartilhar conosco seu código e nos dizer o que ele deveria fazer e não esta fazendo ?

Olá Matheus.

Ele deveria salvar o conteúdo de FormularioAlunoActivity em ListaAlunosActivity. Porém, ao clicar em botaoSalvar, o aplicativo fecha . Toda a execução está sendo realizada no emulador do Android Studio.

Coloquei aqui os trechos de código que considerei mais importantes. Caso tenha faltado algo, posso acrescentar.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.igorklein.agenda">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".ui.activity.FormularioAlunoActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

        <activity android:name=".ui.activity.ListaAlunosActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

<!--                <category android:name="android.intent.category.LAUNCHER" />-->
            </intent-filter>
        </activity>
    </application>

</manifest>

public class ListaAlunosActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_lista_alunos);

        AlunoDAO dao = new AlunoDAO();

        setTitle("Lista de Alunos");

        FloatingActionButton botaoNovoAluno = findViewById(R.id.activity_lista_alunos_fab_novo_aluno);
        botaoNovoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(ListaAlunosActivity.this,
                        FormularioAlunoActivity.class));
            }
        });

        ListView listaDeAlunos = findViewById(R.id.activity_main_lista_alunos_ListView);

        // Criação de um adapter na entrada da listaDeAlunos
        listaDeAlunos.setAdapter(new ArrayAdapter<>(
                this,
                android.R.layout.simple_list_item_1,
                dao.todos()));
    }
}

public class FormularioAlunoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario_aluno);

        final AlunoDAO dao = new AlunoDAO();

        final EditText campoNome = findViewById(R.id.activity_formulario_aluno_nome);
        final EditText campoTelefone= findViewById(R.id.activity_formulario_aluno_telefone);
        final EditText campoEmail = findViewById(R.id.activity_formulario_aluno_email);

        Button botaoSalvar = findViewById(R.id.activity_formulario_aluno_botao_salvar);
        botaoSalvar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String nome = campoNome.getText().toString();
                String telefone = campoTelefone.getText().toString();
                String email = campoEmail.getText().toString();

                Aluno alunoCriado = new Aluno(nome, telefone, email);
                dao.salva(alunoCriado);

                startActivity(new Intent(FormularioAlunoActivity.this,
                        ListaAlunosActivity.class));
            }
        });
    }
}

Bom Dia, Matheus.

Última forma: acabei de descobrir onde estava o meu erro.

Eu estava deixando para trás uma parte importante do código, que era dentro da classe AlunoDAO. Na definição do método todos(), eu não o havia configurado e ele estava Padrão, tal qual o Android Studio o havia criado.

# Como o método estava:
public List<Object> todos() {
    return null;
}
# Como o método deveria estar:
public List<Aluno> todos() {
    return new ArrayList<>(alunos);
}

Depois dessa alteração, passou a funcionar normalmente.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software