Autore Topic: Aggiornare listView dp inserimento/cancellazione record da db  (Letto 1231 volte)

Offline Cono86

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Aggiornare listView dp inserimento/cancellazione record da db
« il: 06 Febbraio 2012, 15:46:54 CET »
0
Ciao a tutti, spero possiate aiutarmi,
praticamente, data una schermata con delle editText, inserisco gli appositi valori e con una query li salvo nel db. Prendendo spunto da un topic precedente sono riuscito a caricare i dati di un db in una listView presente un'alertDialog e cliccando su ogni item riesco a prendermi i dati (nome, cognome,...). Il problema è ke se dopo aver visto la lista, cerco di inserire altri dati, accedendo di nuovo alla stessa listview nn mi aggiorna l'ultimo inserimento, ho visto il metodo notifyDataSetChanged(), ma nn so come utilizzarlo. Lo stesso problema anche per la cancellazione.
Grazie in anticipo.

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornare listView dp inserimento/cancellazione record da db
« Risposta #1 il: 06 Febbraio 2012, 16:37:01 CET »
+1
che tipo di adapter stai utilizzando?

comunque, aggiornando la lista nel tuo adapter, e facendo l'override del getCount dell'adapter in modo che restituisca il corretto numero di elementi, puoi invocare il notifydatasetchanged dell'adapter e farà tutto lui.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Cono86

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Aggiornare listView dp inserimento/cancellazione record da db
« Risposta #2 il: 06 Febbraio 2012, 17:48:29 CET »
0
Ciao,
sto usando un SimpleCursorAdapter, sono riuscito ad aggiornare rendendo globali alcune variabili tra cui il Cursore c ed utilizzando:
c.requery();
adapter.notifyDataSetChanged();

ora però ho un altro problema, non mi cancella il record, ti spiego meglio, selezionando l'item mi prendo tutti i dati ke mi servono e poi cliccando su cancella mi dovrebbe cancellare ed aggiornare la listview.  Il codice utilizzato è il seguente
Codice (Java): [Seleziona]
public void deleteUser(String nome, String cognome, String login, String password, String deviceId){
                String query = "DELETE FROM utente " +
                                "WHERE nome = '" +nome +"' AND cognome = '" +cognome +"' AND login = '" +login +"' AND password = '"+password+"' AND deviceId = '"+deviceId.trim()+"'";
                dbUtenti = dbUtHelper.getWritableDatabase();
                dbUtenti.rawQuery(query, null);
        }

quindi lo richiamo nel seguente modo:
 db.deleteUser(name, surname, log, pwd, devId);


Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornare listView dp inserimento/cancellazione record da db
« Risposta #3 il: 07 Febbraio 2012, 08:55:14 CET »
+1
da dove non te lo cancella?

ogni cambiamento al datasource deve ripercuotersi nella listview, quindi devi notificare il cambiamento del contenuto dell'adapter, anche in questo caso, cioè facendo un requery e un notifydatasetchanged.

altra cosa: anziché rendere globale il Cursor che, suppongo, sia necessario solo nell'adapter, perchè non lo lasci dentro l'adapter ed esponi un metodo requery nell'adapter che richiama il requery sul Cursor?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Cono86

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Aggiornare listView dp inserimento/cancellazione record da db
« Risposta #4 il: 07 Febbraio 2012, 09:06:01 CET »
0
Ciao ti ringrazio per la risposta,
non mi cancellava il record dal db e quindi di conseguenza neanche dalla listview, ho risolto facendo una delete sull'id in questo modo:
Codice (Java): [Seleziona]
public boolean deleteById(int id){
                return dbUtenti.delete(Utente.TABLE_NAME, Utente._id + "='" + id + "'", null) > 0;
        }

in questo modo funziona, solo che volevo cancellare il record in base a tt i campi citati in precedenza ma nn funziona, nel seguente modo:
Codice (Java): [Seleziona]
public boolean deleteUser(String nome, String cognome, String login, String password, String deviceId){
                String whereClause = "nome = ? AND cognome = ? AND login = ? AND password = ? AND deviceId = ?" ;
                String[] whereArgs = {"'"+nome+"'" +"'"+cognome+"'" +"'"+login+"'" +"'"+password+"'" +"'"+deviceId+"'" };
                return dbUtenti.delete(Utente.TABLE_NAME, whereClause, whereArgs) > 0;
        }

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornare listView dp inserimento/cancellazione record da db
« Risposta #5 il: 07 Febbraio 2012, 09:30:09 CET »
0
domanda: la password è criptata in qualche modo?

in ogni caso, usa sempre l'ìd, che è sicuramente univoco.
in teoria potrebbe esserci più di un utente con lo stesso nome, cognome, ....... (in teoria, eh?)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Cono86

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Aggiornare listView dp inserimento/cancellazione record da db
« Risposta #6 il: 07 Febbraio 2012, 09:35:15 CET »
0
in effetti è nel formato tipico della password, però ho fatto altre query che prendevano gli stessi parametri (inclusa la password) e funzionava, cmq per la delete penso che vada bene l'id essendo univoco.  Ti ringrazio per la disponibilità, ti volevo chiedere un'ultima cosa, avendo usato un simpleCursorAdapter, la listview mi viene visualizzata con sfondo bianco e con il testo leggermente è scuro, è possibile modificare il suo layout, oppure dv customizzare l'adapter??

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornare listView dp inserimento/cancellazione record da db
« Risposta #7 il: 07 Febbraio 2012, 10:14:27 CET »
+1
Se la password è codificata allora non la puoi utilizzare in select se non codificandola alla stessa maniera in cui è codificata su db.
Comunque, in generale vale il discorso dell'id, che è univoco.

Puoi modificare il layout personalizzando: eccoti un link di esempio

un saluto.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Cono86

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Aggiornare listView dp inserimento/cancellazione record da db
« Risposta #8 il: 07 Febbraio 2012, 10:16:50 CET »
0
Grazie mille, gli darò un'occhiata.
Saluti