Autore Topic: Delete dati in database  (Letto 1854 volte)

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Delete dati in database
« il: 04 Dicembre 2011, 19:14:35 CET »
0
Salve ragazzi, ho un problemino e spero che possiate aiutarmi, ho una lista nella quale visualizzo i dati che mi interessano che ho precedentemente caricato in un database, come la schermata che vi posto, al tocco del campo della lista faccio aprire un piccolo menù nel quale ho la possibilità di cancellare o modificare il campo, ora arriva il problema, come faccio a cancellare l'intera riga dal database ?
Nell'activity della pagina ho :
Codice (Java): [Seleziona]
ActionItem acceptItem   = new ActionItem(ID_CANC, "Cancella", getResources().getDrawable(R.drawable.ic_accept));
        ActionItem uploadItem   = new ActionItem(ID_UPLOAD, "Modifica", getResources().getDrawable(R.drawable.ic_up));
               
                final QuickAction mQuickAction  = new QuickAction(this);
               
               
                mQuickAction.addActionItem(acceptItem);
                mQuickAction.addActionItem(uploadItem);
               
                db.close();
               
                mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
                        @Override
                        public void onItemClick(QuickAction quickAction, int pos, int actionId) {
                                ActionItem actionItem = quickAction.getActionItem(pos);
                               
                                if (actionId == ID_CANC){
                                       
// ovviamente è qui che devo mettere il codice per far cancellare
                                       
                                }
                               
                               
                        }
                });
               
               
                mQuickAction.setOnDismissListener(new PopupWindow.OnDismissListener() {                
                        @Override
                        public void onDismiss() {
                               
                        }
                });
               
                mList.setOnItemClickListener(new OnItemClickListener() {
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                mSelectedRow = position;
                               
                                mQuickAction.show(view);
                               
                       
                        }
                });
dove appunto devo inserire il codice che al click di cancella mi dovrebbe cancellare i dati, ed ovviamente al click di modifica mi deve aprire una pagina dove posso modificare i contenuti e salvare.

Nella classe del database ho :
Codice (Java): [Seleziona]
public boolean deleteNote(long rowId) {

        return mmDb.delete(ProductsMetaData.ENTRATA_TABLE, ProductsMetaData.ID + "=" + rowId, null) > 0;
    }
come posso usarla per cancellare i dati della riga selezionata?
Aiutatemi  :-(

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Delete dati in database
« Risposta #1 il: 04 Dicembre 2011, 20:55:50 CET »
0
Nell'itemClickListener devi salvarti un riferimento all'id (ultimo parametro che ti viene passato) e poi  usarlo quando fai la delete.

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Delete dati in database
« Risposta #2 il: 05 Dicembre 2011, 11:32:33 CET »
0
Ho fatto in questa maniera ma non mi funziona
Codice (Java): [Seleziona]
public void onItemClick(QuickAction quickAction, int pos, int actionId) {
                                ActionItem actionItem = quickAction.getActionItem(pos);
                                int id_ora = Integer.parseInt(MyDatabase.ProductsMetaData.ID);
                               
                                if (actionId == ID_CANC){
                                       
                                        MyDatabase db=new MyDatabase(getApplicationContext());
                                        db.open();
                                        db.deleteNote(id_ora);
                                        db.close();
                                }
« Ultima modifica: 05 Dicembre 2011, 12:44:20 CET da deideidei »

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Delete dati in database
« Risposta #3 il: 05 Dicembre 2011, 12:42:54 CET »
0
In pratica dovrei cancellare i dati dell'ID corrispondente alla mSelectedRow che corrisponde alla riga della lista selzionata, ma come faccio?

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Delete dati in database
« Risposta #4 il: 05 Dicembre 2011, 13:55:48 CET »
0
Non ho capito dove sta il tuo problema:
1)Non riesci a reperire l'id da cancellare
2)NOn sai impostare la quesry di delete nonostante hai l'id del record da eliminare
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Delete dati in database
« Risposta #5 il: 05 Dicembre 2011, 16:49:47 CET »
0
non so come cancellare i dati che seleziono, ovvero abbinare l'int mSelectedRow ,che corrisponde alla riga selezionata, all'id dei dati contenuti nel database che visualizzo nella lista in quella riga

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Delete dati in database
« Risposta #6 il: 05 Dicembre 2011, 16:51:42 CET »
0
non so come cancellare i dati che seleziono, ovvero abbinare l'int mSelectedRow ,che corrisponde alla riga selezionata, all'id dei dati contenuti nel database che visualizzo nella lista in quella riga

Se stai usando un CursorAdapter ti viene passato direttamente l'id del record, come ti ho detto nel post precedente, è l'ultimo parametro (long id).

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Delete dati in database
« Risposta #7 il: 05 Dicembre 2011, 17:07:05 CET »
0
Questa è l'intera activity
Codice (Java): [Seleziona]
ublic class Example2Activity extends Activity {
         
        private int mSelectedRow = 1;
       
         
        private static final int ID_CANC = 2;
        private static final int ID_UPLOAD = 3;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.example2);
       
        ListView mList                  = (ListView) findViewById(R.id.l_list);
       
        MyDatabase db=new MyDatabase(getApplicationContext());
        db.open();
        @SuppressWarnings("unused")
                String data1 = db.getData();
         
        Cursor c=db.fetchProducts();
        startManagingCursor(c);
       
       
       
        SimpleCursorAdapter adapter=new SimpleCursorAdapter(
                        this, R.layout.product, c,
                        new String[]{
                                        MyDatabase.ProductsMetaData.ENTRATA_IMPORTO_KEY,
                                        MyDatabase.ProductsMetaData.ENTRATA_CATEGORIA_KEY,
                                        MyDatabase.ProductsMetaData.ENTRATA_ID_CAT_KEY},
                                       
                                        new int[]{R.id.priceTv1,R.id.priceTv,R.id.imageView11});
                       
                 mList.setAdapter(adapter);
       
       
       
        ActionItem acceptItem   = new ActionItem(ID_CANC, "Cancella", getResources().getDrawable(R.drawable.ic_accept));
        ActionItem uploadItem   = new ActionItem(ID_UPLOAD, "Modifica", getResources().getDrawable(R.drawable.ic_up));
               
                final QuickAction mQuickAction  = new QuickAction(this);
               
                mQuickAction.addActionItem(acceptItem);
                mQuickAction.addActionItem(uploadItem);
               
                db.close();
               
                mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
                        @Override
                        public void onItemClick(QuickAction quickAction, int pos, int actionId) {
                                ActionItem actionItem = quickAction.getActionItem(pos);
                               
                               
                                if (actionId == ID_CANC){
                                       
                                        MyDatabase db=new MyDatabase(getApplicationContext());
                                        db.open();
                                        db.deleteNote(mSelectedRow); //ovviamente non funziona in questa maniera
                                        db.close();
                                }
                               
                                        Toast.makeText(getApplicationContext(), actionItem.getTitle() + " item selected on row "
                                                        +mSelectedRow, Toast.LENGTH_SHORT).show();
                               
                        }
                });
               
               
                mQuickAction.setOnDismissListener(new PopupWindow.OnDismissListener() {                
                        @Override
                        public void onDismiss() {
                               
                        }
                });
               
                mList.setOnItemClickListener(new OnItemClickListener() {
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                mSelectedRow = position;
                               
                                mQuickAction.show(view);
                               
                       
                        }
                });
    }
}

dove reperisco il dato che dicevi?

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Delete dati in database
« Risposta #8 il: 06 Dicembre 2011, 12:45:01 CET »
0
Niente ragazzi ..... non mi potete aiutare? :-(

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Delete dati in database
« Risposta #9 il: 06 Dicembre 2011, 12:52:27 CET »
0
Quando dici niente ragazzi , cosa significa ?
Hai degli errori ? se si posta il locat.
Quello che ti consiglio e di seguire passo passo ogni cosa.
Ad esempio, metti dei log sulla selezione dell'item e verifica cosa tiri fuori(hai fatto come ti ha consigliato da Ricky) ?
Confronta quello che ottieni con l'id del database se gli id corrispondono sei a cavallo.
Facci sapere  :-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Delete dati in database
« Risposta #10 il: 06 Dicembre 2011, 12:53:25 CET »
0
Niente ragazzi ..... non mi potete aiutare? :-(

Mi sembra di averti detto come fare... te lo devo proprio fare io???  o_O

Codice (Java): [Seleziona]
ublic class Example2Activity extends Activity {
         
        private int mSelectedRow = 1;
       
         
        private static final int ID_CANC = 2;
        private static final int ID_UPLOAD = 3;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.example2);
       
        ListView mList                  = (ListView) findViewById(R.id.l_list);
       
        MyDatabase db=new MyDatabase(getApplicationContext());
        db.open();
        @SuppressWarnings("unused")
                String data1 = db.getData();
         
        Cursor c=db.fetchProducts();
        startManagingCursor(c);
       
       
       
        SimpleCursorAdapter adapter=new SimpleCursorAdapter(
                        this, R.layout.product, c,
                        new String[]{
                                        MyDatabase.ProductsMetaData.ENTRATA_IMPORTO_KEY,
                                        MyDatabase.ProductsMetaData.ENTRATA_CATEGORIA_KEY,
                                        MyDatabase.ProductsMetaData.ENTRATA_ID_CAT_KEY},
                                       
                                        new int[]{R.id.priceTv1,R.id.priceTv,R.id.imageView11});
                       
                 mList.setAdapter(adapter);
       
       
       
        ActionItem acceptItem   = new ActionItem(ID_CANC, "Cancella", getResources().getDrawable(R.drawable.ic_accept));
        ActionItem uploadItem   = new ActionItem(ID_UPLOAD, "Modifica", getResources().getDrawable(R.drawable.ic_up));
               
                final QuickAction mQuickAction  = new QuickAction(this);
               
                mQuickAction.addActionItem(acceptItem);
                mQuickAction.addActionItem(uploadItem);
               
                db.close();
               
                mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
                        @Override
                        public void onItemClick(QuickAction quickAction, int pos, int actionId) {
                                ActionItem actionItem = quickAction.getActionItem(pos);
                               
                               
                                if (actionId == ID_CANC){
                                       
                                        MyDatabase db=new MyDatabase(getApplicationContext());
                                        db.open();
                                        db.deleteNote(mSelectedRow); //ovviamente non funziona in questa maniera
                                        db.close();
                                }
                               
                                        Toast.makeText(getApplicationContext(), actionItem.getTitle() + " item selected on row "
                                                        +mSelectedRow, Toast.LENGTH_SHORT).show();
                               
                        }
                });
               
               
                mQuickAction.setOnDismissListener(new PopupWindow.OnDismissListener() {                
                        @Override
                        public void onDismiss() {
                               
                        }
                });
               
                mList.setOnItemClickListener(new OnItemClickListener() {
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                mSelectedRow = id;
                               
                                mQuickAction.show(view);
                               
                       
                        }
                });
    }
}

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Delete dati in database
« Risposta #11 il: 06 Dicembre 2011, 13:02:31 CET »
0
Scusatemi ... nel frattempo ho trovato la soluzione ho fatto così e mi funziona  ;-):
Codice (Java): [Seleziona]
mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
                       
                        @Override
                        public void onItemClick(QuickAction quickAction, int pos, int actionId) {
                                ActionItem actionItem = quickAction.getActionItem(pos);
                                MyDatabase db=new MyDatabase(getApplicationContext());
                       
                                Cursor cursor = (Cursor) mList.getItemAtPosition(mSelectedRow);
                                final int item_id = cursor.getInt(cursor.getColumnIndex(MyDatabase.ProductsMetaData.ID));
                               
                               
                                if (actionId == ID_CANC){
                                       
                                        db.open();
                                        db.deleteNote(item_id);
                                        db.close();
                                       
                                       
                                }
                               
                                        Toast.makeText(getApplicationContext(), actionItem.getTitle() + " item selected on row "
                                                        +mSelectedRow, Toast.LENGTH_SHORT).show();
                                       
                                       
             }
                       
                       
                       
                });
               

Soltanto che non mi aggiorna la lista senza l'elemento cancellato, quindi devo uscire e rientrare nella pagina per vederla aggiornata

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Delete dati in database
« Risposta #12 il: 06 Dicembre 2011, 13:08:07 CET »
0
Ok.
Questo però è un altro problema  :-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Delete dati in database
« Risposta #13 il: 06 Dicembre 2011, 13:16:44 CET »
0
come posso  risolverlo?
ho provato ad inserire
Codice (Java): [Seleziona]
cursor.requery();dopo la delete ma tutti i dati presenti scompaiono e poi devo nuovanente uscire e rientrare per rivederli

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Delete dati in database
« Risposta #14 il: 06 Dicembre 2011, 13:52:45 CET »
0
Non puoi eliminare l'item direttamente ?
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .