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

Duvida para Deletar Aluno

Pessoal, segui o video para deletar o Aluno, porem quando faço o LongClick e escolho deletar, ele não deleta do banco. Onde posso estar errando ? Segue meu codigo. (ListaAlunos.java)

package br.com.caelum.cadastro;

import java.util.List;

import br.com.caelum.cadastro.dao.AlunoDAO;
import br.com.caelum.cadastro.modelo.Aluno;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ListaAlunos extends Activity {

    private ListView lista;
    private Aluno aluno;

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

        lista = (ListView) findViewById(R.id.lista);

        registerForContextMenu(lista);

        lista.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapter, View view,
                    int posicao, long id) {
                Toast.makeText(ListaAlunos.this, "Clique na Posicao" + posicao,
                        Toast.LENGTH_SHORT).show();

            }

        });

        lista.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> adapter, View view,
                    int posicao, long id) {

                aluno = (Aluno) adapter.getItemAtPosition(posicao);

                return false;
            }

        });

    }

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){

        menu.add("Ligar");
        menu.add("Enviar SMS");
        menu.add("Navegar no Site");
        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new OnMenuItemClickListener(){

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                AlunoDAO dao = new AlunoDAO(ListaAlunos.this);

                dao.deletar(aluno);

                dao.close();

                carregaLista();

                return false;
            }

        });


        menu.add("Ver no Mapa");
        menu.add("Enviar e-mail");

        super.onCreateContextMenu(menu, v, menuInfo);
    }

    protected void onResume(){
        super.onResume();

        carregaLista();

    }

    private void carregaLista() {
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.getLista();
        dao.close();

        int layout = android.R.layout.simple_list_item_1;

        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, layout,
                alunos);

        lista.setAdapter(adapter);
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.listagem_alunos, menu);

        return super.onCreateOptionsMenu(menu);

    }

    // lidando com um menu selecionado
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int intemClicado = item.getItemId();

        // fazemos um switch em cima do intem clidado
        switch (intemClicado) {
        case R.id.novo: // id do icon do nosso menu
            Intent irParaFormulario = new Intent(this, Formulario.class); // nos leva para outro formulario
            startActivity(irParaFormulario); // aqui executamos ela.
            break;

        default:
            break;
        } // end switch

        return super.onOptionsItemSelected(item);
    } // end method onOptionsItemSelected

}
AlunoDAO.java

package br.com.caelum.cadastro.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import br.com.caelum.cadastro.modelo.Aluno;

public class AlunoDAO extends SQLiteOpenHelper {

    private static final String DATABASE = "CadastroCaelum";
    private static final int VERSAO = 1;

    public AlunoDAO(Context context) {
        super(context, DATABASE, null, VERSAO);
        // TODO Auto-generated constructor stub
    }

    public void salva(Aluno aluno) {
        ContentValues values = new ContentValues();

        values.put("nome", aluno.getNome());
        values.put("site", aluno.getSite());
        values.put("endereco", aluno.getEndereco());
        values.put("nota", aluno.getNota());
        values.put("telefone", aluno.getTelefone());

        getWritableDatabase().insert("Alunos",null,values);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String ddl = "CREATE TABLE Alunos (id PRIMARY KEY, " + 
                    "nome TEXT UNIQUE NOT NULL, telefone TEXT, " +
                    "endereco TEXT, site TEXT, foto TEXT, nota REAL);";

        db.execSQL(ddl);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String ddl = "DROP TABLE IF EXISTS Alunos";
        db.execSQL(ddl);

        this.onCreate(db);

    }

    public List<Aluno> getLista() {
        String[] colunas = {"id" , "nome" , "site" , "telefone" , "endereco" , "foto" , "nota"};
                            // 0 , 1 ,2 ,3 ,4....
        Cursor cursor = getWritableDatabase().query("Alunos",colunas , null , null , null , null , null);

        ArrayList<Aluno> alunos = new ArrayList<Aluno>();

         while (cursor.moveToNext()) {

             Aluno aluno = new Aluno();

             aluno.setId(cursor.getLong(0));
             aluno.setNome(cursor.getString(1));
             aluno.setSite(cursor.getString(2));
             aluno.setTelefone(cursor.getString(3));
             aluno.setEndereco(cursor.getString(4));
             aluno.setFoto(cursor.getString(5));
             aluno.setNota(cursor.getDouble(6));

             alunos.add(aluno);

         }

        return alunos;
    }

    public void deletar(Aluno aluno) {
        String[] args = {aluno.getId().toString()};

        getWritableDatabase().delete("Alunos", "id=?", args);


    }


}
6 respostas

Oi Fabio!

Está acontecendo alguma exception ou simplesmente não acontece nada?

solução!

Já consegui resolver...

No vídeo e no texto mostra para criar o banco com :

id INTEGER PRIMARY KEY

Porem, quando deletamos ou damos um uptade na tabela, ele nao consegue pegar o ID, vem com valor 0.

Então criei o banco com:

id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT

E consegui.

Fica a dica para quem acompanhar o Video o texto do Site essa "Errata".

Perdi um dia com essa errata. O video deve ser consertado para não prejudicar outros alunos.

Oi pessoal,

Obrigado pela dica! Já pedi para nossa equipe de vídeo colocar a errata no texto!

Um abraço!

Olá Fábio,

Na verdade erro está na criação da tabela onde você declara o "id PRIMARY KEY", ele deveria ser "id INTEGER PRIMARY KEY".

Vimos que o vídeo está da forma como você fez (e com certeza deve ser o motivo pelo qual você teve este problema). Já adicionamos uma mensagem de errata no vídeo.

O texto do exercício está correto, ou seja, informa a declaração como "id INTEGER PRIMARY KEY".

No SQLite, uma coluna que seja INTEGER PRIMARY KEY, ao inseri valor null nesta coluna no banco, automaticamente o SQLite "autoincrementa". Main detalhes pode ser encontrado na FAQ do SQLite que fala exatamente sobre isso (http://www.sqlite.org/faq.html#q1).

Colocar INTEGER + NOT NULL + PRIMARY KEY + AUTOINCREMENT acaba sendo redundante.

Obrigada pelo alerta, por conta dele encontramos a errata! ;) Consegui ajudar?

Abraços!

Show de bola!

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