2012-06-13 16 views
29

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

+2

Controlla il post del mio blog sull'argomento: [** Informazioni sul 'LoaderManager' **] (http://www.androiddesignpatterns.com/2012/05/why-you-should-use-loadermanager.html) –

+0

@Jim c'è qualche problema con il fornitore di contenuti potresti aiutarmi? –

risposta

22

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.

+2

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

+0

Penso che "prendere il codice sorgente della classe CursorLoader dalla libreria di compatibilità e ..." sia la scelta migliore, non è vero? – BornToCode

+0

Ho dovuto estendere 'CursorLoader' con la mia classe per gestire' OrmLite'. – theblang

0

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.

Problemi correlati