JavascriptProva

martedì 30 agosto 2016

Analisi della funzione che ho creato per trasferire su Firebase il contenuto di un SQLiteDatabase

Ecco, ho trovato il modo...

Questa è la funzione che ho creato per archiviare un database SQLite su Firebase:
    void archivia(Cursor crs){
        crs.moveToFirst();

        int c=0;
        do{
            Map<String,Object> mappa=new HashMap<String,Object>();

            for(int i=0;i<crs.getColumnCount();i++) {

                mappa.put(crs.getColumnName(i), (Object) crs.getString(i));
                reference.child("" + c).push();
                reference.child("" + c).updateChildren(mappa);
            }

            c++;
        }while(crs.moveToNext());
    }
Come parametro viene fornito un oggetto Cursor che rappresenta la query del database.
 crs.moveToFirst();
resetto il Cursor alla sua posizione iniziale.

int c=0;
stabilisco un "contatore".

Ora mi leggo tutto il cursore, e per ogni record:
Map<String,Object> mappa=new HashMap<String,Object>();
creo una HashMap String, Object;

for(int i=0;i<crs.getColumnCount();i++) {
Per ogni colonna...

mappa.put(crs.getColumnName(i), (Object) crs.getString(i));
...inserisco nella HashMap il nome della colonna e, castandolo a Object, il valore del campo.

reference.child("" + c).push();
Aggiungo a un child del database Firebase il cui nome è specificato dal contatore (che se non esiste viene creato), un elemento ancora indeterminato;

reference.child("" + c).updateChildren(mappa);
Modifico l'elemento appena creato alla luce della HashMap che ho compilato in precedenza.

Così ogni nodo figlio del database rappresenta un record in quanto porta "attaccate" tutte le colonne di un record.

            c++;
        }while(crs.moveToNext());
    }
Aumento il contatore e vado al prossimo record del Cursor.

Nessun commento:

Posta un commento