Autore Topic: Problemi con cursor  (Letto 864 volte)

Offline allemattio

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Mac Os 10.6
Problemi con cursor
« il: 16 Marzo 2011, 00:16:52 CET »
0
non so se sia la sezione giusta.

Io ho un cursor che viene riempito da una query.
Poi con questo cursor riempio uno Spinner.

C'è un modo per "filtrare" gli elementi del cursor in modo che non vengano tutti inseriti nello spinner?

Il motivo per cui voglio farlo è che sto cercando di fare a mano una select distinct che non riesco a fare con le query.

Grazie

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problemi con cursor
« Risposta #1 il: 16 Marzo 2011, 00:34:50 CET »
0
se hai modo di darci dettagli sul db e la query che devi fare, sarebbe meglio fare una query piuttosto che filtrare gli elementi..
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline allemattio

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Mac Os 10.6
Re:Problemi con cursor
« Risposta #2 il: 16 Marzo 2011, 00:43:30 CET »
0
OK!!
scrivo un po di codice:
Questa è la query..Io ho una tabella applicazioni con le colonne _id, nome, genere, autore, descr e path
con questa queri speravo di fare l'effetto di

SELECT DISTINCT genere FROM applicazioni ORDER BY genere

Codice (Java): [Seleziona]
public Cursor getGeneri() {

        return mDb.query(true,DATABASE_TABLE, new String[] {ID,GENERE}, null, null, null, null, GENERE,null);
    }

la query purtroppo non va e mi ritorna tutto infatti quando vado a usare il cursor ritornato per riempire lo spinner mi trovo due volte i generi.
il codice che uso per riempire lo spinner è:
Codice (Java): [Seleziona]
mDbHelper = new AppDBAdapter(this);
        mDbHelper.open();

        Spinner spinner = (Spinner) findViewById(R.id.spinnerGeneri);
        Cursor c = mDbHelper.getGeneri();
        startManagingCursor(c);
       
       
        String[] from = new String[] { AppDBAdapter.GENERE};
        int[] to = new int[] { android.R.id.text1 };
       SimpleCursorAdapter generi =  new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to);
        generi.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
            spinner.setAdapter(generi);

avevo pensato di fare una cosa cosi ma l'app crasha:
Codice (Java): [Seleziona]
mDbHelper = new AppDBAdapter(this);
        mDbHelper.open();

       Spinner spinner = (Spinner) findViewById(R.id.spinnerGeneri);
        Cursor c = mDbHelper.getGeneri();
        startManagingCursor(c);
       
        ArrayList<String> generitrovati = new ArrayList<String>();
        String[] from = new String[] { AppDBAdapter.GENERE};
        int[] to = new int[] { android.R.id.text1 };
       
        if(c.getCount()>0){
                c.moveToFirst();
               
                do{
                        if(!generitrovati.contains( c.getString(c.getColumnIndexOrThrow(AppDBAdapter.GENERE) )))
                        {
                                generitrovati.add(c.getString(c.getColumnIndexOrThrow(AppDBAdapter.GENERE) ));
                        }
                       
                               
                }while(c.moveToNext());
        }
        c.moveToFirst();
        ArrayAdapter<String> prova= new ArrayAdapter<String>(getApplicationContext(), android.R.id.text1, generitrovati);
        prova.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(prova);
        mDbHelper.close();

non so se sono stato molto chiaro...

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problemi con cursor
« Risposta #3 il: 16 Marzo 2011, 08:49:54 CET »
0
Perchè non fai semplicemente?

Codice (Java): [Seleziona]
public Cursor getGeneri() {
        return mDb.rawQuery("SELECT DISTINCT genere FROM applicazioni ORDER BY genere", null);
}

Comunque qualcosa mi fa pensare che potresti normalizzare creando una tabella per il genere delle varie applicazioni :P

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problemi con cursor
« Risposta #4 il: 16 Marzo 2011, 10:33:41 CET »
0
Perchè non fai semplicemente?

Codice (Java): [Seleziona]
public Cursor getGeneri() {
        return mDb.rawQuery("SELECT DISTINCT genere FROM applicazioni ORDER BY genere", null);
}

Comunque qualcosa mi fa pensare che potresti normalizzare creando una tabella per il genere delle varie applicazioni :P
referenziando il genere con una foreign key? si,però le foreign key sono una menata in sqlite...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problemi con cursor
« Risposta #5 il: 16 Marzo 2011, 11:46:15 CET »
0
referenziando il genere con una foreign key? si,però le foreign key sono una menata in sqlite...

Perchè non c'è la gestione dell'integrità referenziale? beh puoi sempre risolvere con dei trigger :P

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problemi con cursor
« Risposta #6 il: 16 Marzo 2011, 12:05:49 CET »
0
Perchè non c'è la gestione dell'integrità referenziale? beh puoi sempre risolvere con dei trigger :P
si si, certo, comunque anche sqlite è una cosa che devo approfondire, le guide online non sono cosi dettagliate...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline allemattio

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Mac Os 10.6
Re:Problemi con cursor
« Risposta #7 il: 16 Marzo 2011, 16:29:10 CET »
0
Perchè non fai semplicemente?

Codice (Java): [Seleziona]
public Cursor getGeneri() {
        return mDb.rawQuery("SELECT DISTINCT genere FROM applicazioni ORDER BY genere", null);
}

Comunque qualcosa mi fa pensare che potresti normalizzare creando una tabella per il genere delle varie applicazioni :P

con questa query mi da errore e si blocca l'app...
devo farla diventare perchè funzioni:
Codice (Java): [Seleziona]
public Cursor getGeneri() {
        return mDb.rawQuery("SELECT DISTINCT genere,_id FROM applicazioni ORDER BY genere", null);
}

e non mi da il risultato che voglio   :-( devo proprio riprogettare il database? è l'unica?

Offline allemattio

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Mac Os 10.6
Re:Problemi con cursor
« Risposta #8 il: 16 Marzo 2011, 16:40:00 CET »
0
ok ho risolto cosi:
Codice (Java): [Seleziona]
        mDbHelper = new AppDBAdapter(this);
        mDbHelper.open();

        Spinner spinner = (Spinner) findViewById(R.id.spinnerGeneri);
        Cursor c = mDbHelper.getGeneri();
        startManagingCursor(c);
       
        ArrayList<String> generitrovati = new ArrayList<String>();
        String[] from = new String[] { AppDBAdapter.GENERE};
        int[] to = new int[] { android.R.id.text1 };
       
        if(c.getCount()>0){
                c.moveToFirst();
               
                do{
                        if(!generitrovati.contains( c.getString(c.getColumnIndexOrThrow(AppDBAdapter.GENERE) )))
                        {
                                generitrovati.add(c.getString(c.getColumnIndexOrThrow(AppDBAdapter.GENERE) ));
                        }
                       
                               
                }while(c.moveToNext());
        }
        c.moveToFirst();
       
        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, generitrovati);
 
       
        spinnerArrayAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
 
       
        spinner.setAdapter(spinnerArrayAdapter);