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

Declaração do objeto AlunoDao

Só por curiosidade galera, quando o processor criou uma instancia do objeto AlunoDao, ele o fez fora do click. Criei um outro exemplo fazendo o oposto, obtive o mesmo resultado, quando devo utilizar o meu exemplo e a do professor?

Código: Professor

public class FormularioActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario);
        setTitle("Agenda");

        AlunoDao dao = new AlunoDao();

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

        botaoSalvar.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                String nome = campoNome.getText().toString();
                String email = campoTelefone.getText().toString();
                String telefone = campoEmail.getText().toString();

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

                startActivity(new Intent(FormularioActivity.this, MainActivity.class));

            }
        });
    }
}

Código: Meu

public class FormularioActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario);
        setTitle("Agenda");


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

        botaoSalvar.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                String nome = campoNome.getText().toString();
                String email = campoTelefone.getText().toString();
                String telefone = campoEmail.getText().toString();

                Aluno alunoCriado = new Aluno(nome, telefone, email);
                **AlunoDao dao = new AlunoDao();**

                dao.salva(alunoCriado);

                startActivity(new Intent(FormularioActivity.this, MainActivity.class));

            }
        });
    }
}
2 respostas
solução!

Thaillan, de boa ?

Cara isso é questão de linguagem, ambas formas funcionam mesmo :)

No caso do instrutor ele optou por deixar num escopo maior, o que significa que ele pode usar em qualquer lugar dentro do contexto do método onCreate, fora desse método ele não consegue.

No seu caso, você optou em fazer a instância dentro do contexto da classe anonima, o que significa que você só pode usa-la dentro do método onclick, fora dele você não tem como acessa-la

Muito obrigado meu amigo!