Cercando di aggiornare la mia vecchia app in cui alcuni metodi sono deprecati. Ho scoperto che se voglio lavorare con ListView che mostra i dati da db, dovrei usare LoaderManager + CursorLoader. CursorLoader funziona con i fornitori di contenuti. Quindi per ogni tabella nel mio db dovrei creare il content provider ora? Perché dovrei ? Per quanto ne so, i fornitori di contenuti vengono utilizzati per condividere alcune informazioni DB con altre applicazioni, ma la mia app non condivide alcuna informazione. Quindi posso usare CursorLoader senza provider di contenuti ???Android: CursorLoader, LoaderManager, SQLite
risposta
Ho scritto un blog post su questo argomento. È inoltre possibile controllare questo answer per ulteriori informazioni. Spero che chiarisca le cose per te.
Come menzionato da Barak, è possibile implementare uno CursorLoader
senza provider di contenuti estendendo la classe AsyncTaskLoader<Cursor>
. Detto questo, la maggior parte delle esercitazioni e del codice di esempio utilizza ContentProvider
s e sembra che anche il team di Android ne incoraggi l'utilizzo. È anche molto meno complicato dell'attuazione della tua classe.
Detto questo, se si davvero non si desidera utilizzare i fornitori di contenuti, Dianne Hackborn (uno degli sviluppatori quadro di Android, e conosciuto anche come "hackbod" qui su SO) suggerisce scrivere il proprio caricatore che utilizza il classe di database invece di un fornitore di contenuti. Il modo più semplice è prendere la fonte della classe CursorLoader
dalla libreria di compatibilità e sostituire le query del provider con le query con la propria classe db helper.
Penso che valga la pena menzionare che l'uso di 'ContentProvider's è incoraggiato solo se si prevede di fornire dati ad altre app. Se non lo fai (cioè i dati sono privati della tua app), allora sei incoraggiato ad usare semplici database SQLite. Per maggiori informazioni, consultare i documenti per [ContentProvider] (https://developer.android.com/reference/android/content/ContentProvider.html). – Felix
Penso che "prendere il codice sorgente della classe CursorLoader dalla libreria di compatibilità e ..." sia la scelta migliore, non è vero? – BornToCode
Ho dovuto estendere 'CursorLoader' con la mia classe per gestire' OrmLite'. – theblang
Sì, è possibile, È possibile disporre di caricatori di dati personalizzati che possono caricare oggetti definiti dall'utente o qualsiasi tipo di oggetto o elenco.
Basta esaminare gli esempi da Android sdk per LoaderCustomSupport.java negli esempi di libreria di compatibilità e demo.
- 1. Android CursorLoader
- 2. Utilizzo di CursorLoader per eseguire query su DB SQLite e compilare AutoCompleteTextView
- 3. Limita la query in CursorLoader
- 4. Gestione di tabelle SQLite e cursori su Android
- 5. Recyclerview + Content provider + CursorLoader
- 6. Android CursorLoader non risponde alle notifiche ContentProvider
- 7. sqlite android sqlite sincronizzazione sqlite
- 8. Differenza tra CursorLoader e AsyncTaskLoader
- 9. CursorLoader, ottiene URI per il database locale
- 10. IllegalStateException - Supporto LoaderManager con AutocompleteTextView
- 11. AutoCompleteTextView supportato da CursorLoader
- 12. Le migliori pratiche per interrogare il database SQLite in ListFragment con CursorLoader?
- 13. Elenco cercapersone e CursorLoader
- 14. Android - SQLite ContentResolver inserisce/elimina/aggiorna sul thread UI?
- 15. AlphabetIndexer con adattatore personalizzato gestito da LoaderManager
- 16. Errore su LoaderManager quando si utilizza la libreria di supporto
- 17. Negozio Android SQLite
- 18. Android SQLite trapelato
- 19. Android Sqlite Caratteri speciali
- 20. Attivatori SQLite in Android?
- 21. Android SQLite incremento automatico
- 22. Prestazioni Sqlite Android
- 23. Accesso multithread Android SQlite
- 24. synchronize database sqlite Android
- 25. Parametri rawquery SQLite Android
- 26. Android Sync Sqlite
- 27. Android: SQLite - insertWithOnConflict
- 28. a qualche domanda sulla cursori database SQLite in Android
- 29. NullPointerException in restartLoader Modalità di LoaderManager
- 30. Devo usare Frammenti per ottenere un LoaderManager?
Controlla il post del mio blog sull'argomento: [** Informazioni sul 'LoaderManager' **] (http://www.androiddesignpatterns.com/2012/05/why-you-should-use-loadermanager.html) –
@Jim c'è qualche problema con il fornitore di contenuti potresti aiutarmi? –