Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

A agenda não salva mais.

Oi, minha agenda quando vou criar um novo aluno não salva mais, porque, mesmo que não esteja editando o aluno, ele puxa o id = 0. segue os códigos a baixo, agradeço desde já: ListaAlunosActivity

public class ListaAlunosActivity extends AppCompatActivity {

    private ListView listaAlunos;
    private List<Aluno> alunos;
    private AlunoDAO dao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        listaAlunos = (ListView) findViewById(R.id.lista_alunos);
        FloatingActionButton add = (FloatingActionButton) findViewById(R.id.ListaAddAluno);
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent IntentFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(IntentFormulario);
            }
        });

        listaAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> lista, View item, int position, long id) {
                Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(position);
                Intent form = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                form.putExtra("aluno", aluno);
                startActivity(form);
            }
        });

        /*listaAlunos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> lista, View item, int position, long id) {
                Toast.makeText(ListaAlunosActivity.this, "Clique longo", Toast.LENGTH_SHORT).show();
                return false;
            }
        });*/

        registerForContextMenu(listaAlunos);
    }

    @Override
    protected void onResume() {
        super.onResume();
        carregarTela();
    }

    private void carregarTela(){
        dao = new AlunoDAO(this);
        alunos = dao.buscaAlunos();
        dao.close();
        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
        listaAlunos.setAdapter(adapter);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {
        MenuItem excluir = menu.add("Excluir");
        excluir.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);
                dao.exclui(aluno);
                Toast.makeText(ListaAlunosActivity.this, "Excluir o aluno "+ aluno.getNome(), Toast.LENGTH_SHORT).show();
                carregarTela();
                return false;
            }
        });
    }
}

FormularioActivity

public class FormularioActivity extends AppCompatActivity {

    private FormularioHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario);
        helper = new FormularioHelper(this);
        Intent intent = getIntent();
        Aluno aluno = (Aluno) intent.getSerializableExtra("aluno");
        if (aluno != null){
            helper.preencheFormulario(aluno);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_formulario, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu_formulario_ok:{
                Aluno aluno = helper.getAluno();
                AlunoDAO dao = new AlunoDAO(this);

        //Esse if apresenta o id = 0 e chama o metodo dao.altera
                if (String.valueOf(aluno.getId()) == null ) {
                    dao.insere(aluno);
                }else{
                    dao.altera(aluno);
                }
                dao.close();

                Toast.makeText(FormularioActivity.this, aluno.getNome() + " salvo!", Toast.LENGTH_SHORT).show();

                finish();
                break;
            }
        }
        return super.onOptionsItemSelected(item);
    }
}

se alguém descobrir, por favor me avise, Obrigado

1 resposta
solução!

Resolvido, a classe Aluno tinha o id como long, e não Long, não podendo retornar null, e, o if:

if (String.valueOf(aluno.getId()) == null ) {
                    dao.insere(aluno);
                }else{
                    dao.altera(aluno);
                }
                dao.close();

não podia ter o String.valueOf, pois null (String) != null (Long).