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

Aula 5 : Não consigo fazer o Delete funcionar

já refiz várias vezes a aula 5 e realmente não consigo fazer o deletar funcionar, já conferir o código milhões de vezes...Por favor, veja meu código abaixo e me diz o que tah faltando para eu continuar o curso, pq parei na aula 5 e não consigo sair mais.

ListaAlunos.java

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, "Click na Posição"+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;
            }
        });

    }

@Override
    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 email");




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

 @Override
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);
}   


@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.lista_alunos, menu);

    return super.onCreateOptionsMenu(menu);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int itemClicado=item.getItemId();


    switch (itemClicado) {
        case R.id.novo:
            Intent irParaFormulario=new Intent(this, Formulario.class);
            startActivity(irParaFormulario);
            break;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}
}

AlunoDAO.java

public class AlunoDAO extends SQLiteOpenHelper {

    private static final String DATABASE = "CadastroSimples";
    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("telefone", aluno.getTelefone());
        values.put("nota",aluno.getNota());
        values.put("foto",aluno.getFoto());


        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", "endereco", "telefone","nota", "foto"};
        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.setEndereco(cursor.getString(3));
            aluno.setTelefone(cursor.getString(4));
            aluno.setNota(cursor.getDouble(5));
            aluno.setFoto(cursor.getString(6));
            alunos.add(aluno);
        }


        return alunos;
    }

    public void deletar(Aluno aluno) {
        String[] args={aluno.getId().toString()};
        getWritableDatabase().delete("Alunos", "id=?", args);

    }
}

FormularioHelper.java

public class FormularioHelper{
    private EditText editNome;
    private EditText editSite;
    private EditText editEndereco;
    private EditText editTelefone;
    private RatingBar ratingNota;

    public FormularioHelper(Formulario formulario) {


        editNome=(EditText)formulario.findViewById(R.id.nome);
        editSite=(EditText)formulario.findViewById(R.id.site);
        editEndereco=(EditText)formulario.findViewById(R.id.endereco);
        editTelefone=(EditText)formulario.findViewById(R.id.telefone);
        ratingNota=(RatingBar)formulario.findViewById(R.id.nota);
    }

    public Aluno pegaAlunoDoFormulario() {
         Aluno aluno=new Aluno();

        aluno.setNome(editNome.getText().toString());
        aluno.setSite(editSite.getText().toString());
        aluno.setEndereco(editEndereco.getText().toString());
        aluno.setTelefone(editTelefone.getText().toString());
        aluno.setNota(Double.valueOf(ratingNota.getRating()));
        return aluno;
    }
}

AlunoDAO.java

public class AlunoDAO extends SQLiteOpenHelper {

    private static final String DATABASE = "CadastroSimples";
    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("telefone", aluno.getTelefone());
        values.put("nota",aluno.getNota());
        values.put("foto",aluno.getFoto());


        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", "endereco", "telefone","nota", "foto"};
        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.setEndereco(cursor.getString(3));
            aluno.setTelefone(cursor.getString(4));
            aluno.setNota(cursor.getDouble(5));
            aluno.setFoto(cursor.getString(6));
            alunos.add(aluno);
        }


        return alunos;
    }

    public void deletar(Aluno aluno) {
        String[] args={aluno.getId().toString()};
        getWritableDatabase().delete("Alunos", "id=?", args);

    }
}

Aluno.java

public class Aluno {
    private Long id;
    private String nome;
    private String site;
    private String endereco;
    private String telefone;
    private Double nota;
    private String foto;

    @Override
    public String toString() {

        return nome;
    }

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getSite() {
        return site;
    }
    public void setSite(String site) {
        this.site = site;
    }
    public String getEndereco() {
        return endereco;
    }
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    public String getTelefone() {
        return telefone;
    }
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
    public Double getNota() {
        return nota;
    }
    public void setNota(Double nota) {
        this.nota = nota;
    }
    public String getFoto() {
        return foto;
    }
    public void setFoto(String foto) {
        this.foto = foto;
    }
}
3 respostas
solução!

Bom dia,

Rodei seu AlunoDAO aqui e tambem deu o erro de não deletar.. Analisando com calma achei duas coisas diferentes

Ao criar o campo id voce não definiu o INTEGER

id INTEGER PRIMARY KEY estava id PRIMARY KEY

fia a alteração abaixo

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

        db.execSQL(ddl);
}

Rodei o codigo novamente e ainda não deletava (pois o banco ainda era o mesmo)

mudei a versão de

    private static final int VERSAO = 1;

Para

    private static final int VERSAO = 2;

Forçando a recriação do banco.. e apos isto a função delete voltou a funcionar!

Abraços!

A outra coisa alteração que fiz... você não estava fechando o cursor na função criar getLista

public List getLista() { 
    String[] colunas={"id", "nome", "site", "endereco", "telefone","nota", "foto"};
    Cursor cursor=getWritableDatabase().query("Alunos", colunas, null, null, null, null, null);

    ArrayList alunos=new ArrayList ();

        while(cursor.moveToNext()){

            Aluno aluno=new Aluno(); 

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

    cursor.close();
    return alunos; 
}

Espero ter te ajudado!!

A sua dúvida foi a mesma da minha.Sua postagem ajudou! Obrigado!