Autore Topic: Metodi dell'interfaccia Cursor  (Letto 292 volte)

Offline Friz02

  • Utente junior
  • **
  • Post: 104
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3 neo Samsung
  • Sistema operativo:
    windows 7
Metodi dell'interfaccia Cursor
« il: 30 Dicembre 2014, 13:07:23 CET »
0
Buongiorno a tutti, il mio è più un problema teorico...di java.
Il punto è, nella creazione e gestione di un database ho bisogno di utilizzare l'interfaccia Cursor, in particolare alcuni sui metodi come ad esempio moveToNext(), getString(int), ecc..; quello che non capisco è come fanno fanno questi metodi ad eseguire delle qualsiasi operazioni se sono privi del blocco di codice (privi di "corpo")?
Cito ad esempio un parte di codice:
Codice (Java): [Seleziona]
public List<String> getProviders()
    {
        SQLiteDatabase db=helper.getReadableDatabase();
        Cursor crs=db.query("providers",null,null,null,null,null,null);

        List<String> res=new ArrayList<String>();
        while(crs.moveToNext())
        {
            int pos=crs.getColumnIndex("name");
            res.add(crs.getString(pos));
        }
        return res;
    }

Il reference crs invoca, ad esempio, il metodo getString(pos) che di per se non ha corpo (e neanche viene implementato)....quindi, sulla base di cosa riesce a tornare una stringa?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Metodi dell'interfaccia Cursor
« Risposta #1 il: 31 Dicembre 2014, 20:09:43 CET »
0
Perché dici che è un metodo privo di corpo? Dentro la classe Cursor c'è.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Friz02

  • Utente junior
  • **
  • Post: 104
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3 neo Samsung
  • Sistema operativo:
    windows 7
Re:Metodi dell'interfaccia Cursor
« Risposta #2 il: 31 Dicembre 2014, 21:37:09 CET »
0
Il metodo getString(int columnIndex) è un metodo astratto dell'interfaccia Cursor, questo è quello che ho recuperato da http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/android/database/Cursor.java?av=f

 
Codice (Java): [Seleziona]
String getString(int columnIndex);

come si vede non ha corpo (oltre al tipo di ritorno, il nome del metodo e il suo parametro, non c'è niente altro)....quindi cosa fa questo metodo quando viene invocato?.... se viene invocato un metodo astratto si dovrebbe anche implementarlo, cioè si dovrebbe dotarlo di codice.
Faccio un altro esempio, opposto, il metodo getReadableDatabase() della classe SQLiteOpenHelper invece ha corpo:

Codice (Java): [Seleziona]
public SQLiteDatabase getReadableDatabase() {
187        synchronized (this) {
188            return getDatabaseLocked(false);
189        }
190    }
e quanto viene invocato esegue delle operazioni, in particolar modo chiama un altro metodo getDatabaseLocked(false), ecc...e alla fine ritorna un oggetto SQLiteDatabase...ok perfetto.
Probabilmente c'è qualcosa che mi sfugge.