2012-07-09 4 views
13

Qualcuno ha capito come utilizzare SQLiteDatabase.CursorFactory su Android? Sto cercando di ottenere un oggetto SQLiteCursor persistente che utilizza un'istruzione SQL SELECT in cui molte delle espressioni della clausola WHERE utilizzano parametri che possono essere modificati a livello di codice prima della richiesta.Come utilizzare SQLiteDatabase.CursorFactory

Per esempio:

SELECT LocationID FROM Locations WHERE Latitude < northlimit AND Latitude > southlimit AND Longitude < eastlimit AND Longitude > westlimit; 

parametri limite cambieranno dinamicamente, una volta ogni 200 ms

Sto provando a risolvere un problema per cui se mi basta usare SQLiteDatabase.rawQuery("SELECT ..."); Il sistema crea un nuovo CursorWindow per ogni nuova query , in definitiva a corto di memoria. Quindi sto cercando di trovare un modo per forzare il sistema a non creare nuovi CursorWindows.

+0

Prima di ri-interrogare è necessario chiudere il vecchio cursore. In questo modo non dovresti esaurire la memoria. Per quanto ne so SQLite non supporta l'accesso casuale alle righe sui set di risultati della query. È possibile solo iterare un risultato SQLite dall'inizio alla fine. Il framework Android risolve il problema caricando l'intero risultato in un cursore per consentire l'accesso casuale. Se la tua query restituisce molte righe (o molti dati), potresti anche incorrere in una situazione di memoria insufficiente. – tiguchi

risposta

0
myCursor.close(); 
myDataBaseHelp.close(); 

E ricorda, dopo aver estratto i dati, chiudilo!

1

È possibile controllare questo tutorial .. la sua somma è perfettamente:

http://www.youtube.com/watch?v=j-IV87qQ00M

e si dovrebbe chiudere il DB, dopo ogni utilizzo .. un altro modo è quello di creare classe cr Cursore variabile e ogni volta che lo si utilizza controllare questo: se (cr == null) cr = new .... else // // fare qualcosa

cr.close();