Qual è il modo migliore per condividere un DB SQLite tra più attività? Le tabelle da DB sono mostrate in ListView e anche l'eliminazione/inserimento di record deve essere eseguita. Ho sentito parlare dei Servizi, ma non ho trovato esempi per il mio problema. Ora ho la classe SQLiteOpenHelper per aprire DB. Chiudo db in OnPause() e lo apro in onResume(). Ma non posso inserire dati in db da sottoattività, smth va storto.Database SQLite Android condiviso tra le attività
risposta
Creare una classe di applicazione per l'app. Rimarrà attivo in memoria fino a quando una parte della tua app è in esecuzione. È possibile creare il DB dal metodo onCreate e pulirlo nel metodo onTerminate. (Si noti che non vi è alcuna garanzia che venga chiamato onTerminate, quindi è necessario prestare attenzione a cosa si dipende qui. Tuttavia, dal momento che un database SQLite è solo un file e viene arrossato in modo aggressivo, l'operazione di chiusura è una cortesia più che necessità.)
È possibile accedere all'applicazione da qualsiasi attività tramite "getApplication", in modo che il DB sia sempre disponibile.
Per ulteriori informazioni, vedere http://developer.android.com/guide/appendix/faq/framework.html#3.
Aggiornamento:
Come richiesto, ecco un esempio di utilizzo getApplication. È davvero incredibilmente semplice.
SQLiteDatabase mDB;
@Override protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDB = ((MyApplication)getApplication()).mDB;
}
Se ogni attività comprende questo codice, quindi ogni attività avrà un proprio campo di MDB che fa riferimento allo stesso oggetto DB condiviso sottostante.
si potrebbe fare questo l'implementazione di una classe di BaseActivity ciò che viene prorogato di tutte le classi di attività nell'applicazione:
public class BaseActivity extends Activity {
protected static SQLiteOpenHelper database;
@Override
protected void onPause() {
// TODO close database
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
// TODO open database
}
}
public class OneSubActitivy extends BaseActivity {
// methods using database from BaseActivity
}
Qual è la differenza tra implementare l'attività di base e implementare onResume e onPause per ciascuna attività? –
È necessario implementare solo una volta il codice in BaseActivity. Devi scrivere il codice comune per tutte le attività nella classe base ... – caligari
- 1. Condivisione del database sqlite tra più attività Android
- 2. Android: accelerare la transizione elemento condiviso tra le attività
- 3. La transizione dell'elemento condiviso Android tra due attività non funziona
- 4. Android PagerView tra le attività
- 5. synchronize database sqlite Android
- 6. Android Come passare LinkedHashMap tra le attività?
- 7. Ereditarietà tra le attività in Android
- 8. differenza tra rawquery ed execSQL nel database sqlite Android
- 9. Android - Transizioni elemento condiviso con attività di chiamata finish()
- 10. Crea database SQLite in Android
- 11. Schema del database Sqlite Android
- 12. Differenza tra database MySQL/SQLite/etc?
- 13. Attività e accesso in background al database SQLite
- 14. Come migliorare le prestazioni del database SQLite per Android
- 15. Transizione elemento condiviso Android tra un'attività con un frammento in un'altra attività con un frammento
- 16. Flushing e database SQLite su Android
- 17. Android - Accesso al database online SQlite
- 18. Memorizzazione di valuta nel database Android SQlite
- 19. H2 Database vs SQLite su Android
- 20. Aggiornamento database SQLite Android e app
- 21. Perché utilizzare il database sqlite in Android?
- 22. Sqlite Database LEAK FOUND exception in android?
- 23. Android: SQLite che utilizza database errato
- 24. Come accedere alle preferenze condivise tra le attività in Android?
- 25. Android: come passare ArrayList <customObject> tra le attività?
- 26. Android - la storia chiara durante la navigazione tra le Attività
- 27. Passaggio dell'array di stringhe tra le attività Android
- 28. Scorri tra le attività Android come con ViewPager
- 29. Come trasformare un database MSSQL nel database SQLite per Android
- 30. Transizione elemento condiviso con Attività di dialogo
Quindi, qualsiasi attività sarà in grado di leggere/scrivere dati senza conflitti? Potresti mostrare qualche esempio per getApplication() metod? –
Tutte le attività, i servizi, ecc. Utilizzano lo stesso thread di eventi, quindi non c'è alcun rischio di problemi di sincronizzazione. È necessario utilizzare "startManagingCursor" per tutti i cursori che si utilizzano per gli adattatori all'interno delle attività in modo che vengano disattivati e richiesti quando si passa da un'attività all'altra. – beekeeper
Sostituire SQLiteDatabase con SQLiteOpenHelper sarà OK? –