Deletar campos da tabela

11 respostas
M

Primeiramente gostaria de agradecer ao pessoal do Forum, me ajudaram muito , estou na fase final do meu projeto.
Agora minha duvida , tenho uma listView que carrega alguns dados de uma tabela (um produto), tipo “nome” , “preco” , “quantidade”.
Eu preciso dar um jeito do cliente deletar esse produto da tabela caso ele queira, como posso fazer isso?
Obrigado , abraços!

11 Respostas

leo.alvesneuwald

Cara, tu pode pegar o item da lista no evento onListItemClick da tua ListView e dentro deste método tu cria uma AlertDialog e tal e deleta ela.

Eras isso?

M

Sim era essa minha ideia, mas como faria isso?Obrigado

leo.alvesneuwald

http://www.androidbrasilprojetos.org/android/basicao-sobre-adapters-para-listviews-e-spinners/

Essa é uma maneira. (So falta a parte do banco que imagino que saiba)

M

Amigo estou com um erro de logica ,

Codigo da minha listView
carrinho.setOnItemClickListener(new OnItemClickListener() {
	    		@Override
	    		public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
	    				long id) {
	    			codigopedido = pos;
	    			
	    		}
	    	});

Metodo do banco:

public void deletaPedido(){
		  try{
			  bancoDados = openOrCreateDatabase("lanchonete", MODE_WORLD_READABLE, null);
			  String sql = "DELETE FROM pedido WHERE _id = '"+codigopedido+"'";
			  bancoDados.execSQL(sql);
			  
		  }catch (Exception e) {
			// TODO: handle exception
			  Log.i("teste", "erro ao deletar produto :"+e);
		}
	  }

chamo esse metodo ao clicar em um botao!

leo.alvesneuwald

1 - Cara, aonde no onItemClick tu está chamando o deletaPedido()? Se estão na mesma activity (o que é errado), chama o deletaPedido passando o código do que quer deletar.

2 - Troca de String sql = "DELETE FROM pedido WHERE _id = '"+codigopedido+"'"; para String sql = "DELETE FROM pedido WHERE _id = "+codigopedido+"; pois tu tah colocando ’ e o _id é um Integer correto?

Da uma olhada nisso e avisa do resultado.

M

Assim ta dando erro

Mas o problema é que estou comparando a posicao com o meu codigo que sao coisas diferentes =X , eu precisava pegar o nome …

leo.alvesneuwald

Tah certo. Foi mal, é assim: String sql = "DELETE FROM pedido WHERE _id = "+codigopedido;

No teu adapter tu busca essas informações do banco correto? Se for assim, pega usando algo como MeuObjeto meuObj = (MeuObjeto) l.getAdapter().getItem(position);
Dai tu vai ter o teu objeto ali, podendo passar o ID dele.

Agora se tu nao tah usando adapter, acho que tu pode fazer algo tipo assim dentro do teu onClick:

Nunca fiz isso, mas imagino que dai tu pode pegar qualquer item que esteja na tua lista, seja por nome ou outra coisa. Mas o ideal é criar o adapter certo como tinha colocado um link.

M
Meu adapter :
public void carregaDados(){ 
		   try{
			 bancoDados = openOrCreateDatabase("lanchonete", MODE_WORLD_READABLE, null);
			 cursor = bancoDados.query("pedido", campos, null, null, null, null, null);
		   
		   Log.i("TESTE", "SETOU VARIAVEIS ");
		   if(verificaRegistro()){
			   aaLista = new SimpleCursorAdapter(this, R.layout.mostradados, cursor, campos, new int[]{R.id.tvNome,R.id.tvPreco,R.id.tvQuantidade});
			   carrinho.setAdapter(aaLista);
			   Log.i("TESTE", "IMPRIME DADOS ");
			   
			   
		   }
		   else{
			   mensagemExibir("Voce nao comprou nada ainda!", "Compras");
			   startActivity(new Intent(carrinhoCompras.this,realizarPedido.class));
		   }
		   }catch (Exception e) {
			// TODO: handle exception
			   Log.i("Teste", "Erro ao carregar dados: "+e);
		}
		   finally
			{
					bancoDados.close();

				
			}
			   
	   }
leo.alvesneuwald

Objeto:

public class Paciente {
	private Integer Id;
	private String nome;
	private String email;
	private Date datanascimento;
	private String sexo;
	private String codPaciente;
	private String senhaPaciente;

	public Paciente(Integer id, String nome, String email,
			Date datanascimento, String sexo, String codPaciente,
			String senhaPaciente) {
		this.Id = id;
		this.nome = nome;
		this.email = email;
		this.datanascimento = datanascimento;
		this.sexo = sexo;
		this.codPaciente = codPaciente;
		this.senhaPaciente = senhaPaciente;
	}

	public Paciente() {

	}

	public Integer getId() {
		return Id;
	}

	public void setId(Integer id) {
		Id = id;
	}
//GetSetOmitidos

Adapter:

ublic class PacienteAdapter extends BaseAdapter {

	private Context ctx;
	private List<Paciente> lista;

	public PacienteAdapter(Context ctx, List<Paciente> lista) {
		this.ctx = ctx;
		this.lista = lista;
	}

	@Override
	public int getCount() {
		return lista.size();
	}

	@Override
	public Object getItem(int position) {
		return lista.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		Paciente paciente = lista.get(position);
		LayoutInflater layout = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		View v = layout.inflate(com.android.diabetescontrol.activities.R.layout.listapaciente, null);
		
		TextView txtID = (TextView)v.findViewById(com.android.diabetescontrol.activities.R.id.tvCod);
		txtID.setText(paciente.getId().toString());
		
		TextView txtNome = (TextView)v.findViewById(com.android.diabetescontrol.activities.R.id.tvPrinc);
		txtNome.setText(paciente.getNome());
		
		TextView txtEmail = (TextView)v.findViewById(com.android.diabetescontrol.activities.R.id.tvSec);
		txtEmail.setText(paciente.getEmail());
		
		return v;
	}
	

}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linear"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/transparente"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvPrinc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/tvSec"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tvPrinc"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/tvCod"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/tvSec"
        android:layout_centerHorizontal="true"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

Como pego ele no OnClick

public class ListaPacientesActivity extends ListActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setListAdapter(new PacienteAdapter(this,
				new PacientesBusiness().getPacientesDoMedico(this)));
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		Paciente paciente = (Paciente) l.getAdapter().getItem(position);
}
}
M

Eu não tenho uma classe base, como essa paciente , mas tudo bem , vou tentar por, obrigado pela ajuda.
E não querendo explorar mas tambem tenho outra duvida a minha ListView so aparece os dados do banco , por exemplo
Bauru
2.5
2

Eu gostaria que ficasse assim :
Nome : Bauru
Preço : 2.50
Quantidade : 2

Os dados do banco mais um texto antes =D.Obrigado pela ajuda , abraços

leo.alvesneuwald

Ao invés de usar o simpleCursorAdapter usa o SimpleAdapter, que dai tu passa uma lista. So que é mais chato de montar.

Exemplo aqui:

Criado 27 de maio de 2012
Ultima resposta 29 de mai. de 2012
Respostas 11
Participantes 2