2012-04-13 4 views
19

Ho aggiornato il mio android SDK alla versione più recente e ora dice che startManagingCursor() è deprecated. Ho bisogno di aiuto per aggiornare il mio codice per utilizzare il nuovo CursorLoader.Come eseguire (correttamente) la transizione da startManagingCursor a CursorLoader?

private void fillData() { 
    Cursor notesCursor = mDbHelper.fetchAllNotes(); 
    startManagingCursor(notesCursor); 
    NoteAdapter notes = new NoteAdapter(this, R.layout.notes_row, notesCursor); 
    setListAdapter(notes); 
} 

Quindi, startManagingCursor() è vecchio, quale sarebbe il nuovo look codice come, se è stato tradotto?

+1

CursorLoader lavora in adition per ContentProvider ... Quindi non è possibile "tradurre" il codice Rhis .... – Selvin

+0

http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background. html – user1422551

+0

Buono da tenere a mente questa risposta al metodo ammortizzato. Si scopre che gira sul thread principale, il che rallenta le cose, ecco perché è stato ammortizzato. [collegamento] (http://stackoverflow.com/questions/19651680/cursorloader-with-startmanagingcursor) – Azurespot

risposta

16

Innanzitutto, startManagingCursor() funziona ancora. Non è l'ideale, in quanto esegue l'I/O del database sul thread dell'applicazione principale. In Android, "deprecato" generalmente significa "abbiamo qualcos'altro che pensiamo sia meglio che ti suggeriamo di usare". Quindi, quando ha senso nel ciclo di sviluppo della tua app, dovresti considerare la migrazione.

In secondo luogo, come notato da Selvin, l'SDK fornisce solo un'implementazione Loader per un ContentProvider. Ho a project that offers a Loader for SQLite direttamente.

In terzo luogo, non esiste realmente una "traduzione" di tipo diretto per il codice. Il framework Loader è asincrono e basato sugli eventi, mentre il tuo codice non lo è.

In generale, il vostro Loader sarebbe responsabile per il recupero delle note, e si dovrebbe popolare il ListView in onLoadFinished(), quando si è consegnato il Cursor dal Loader.

+2

Solo per aggiungere un pensiero qui, se si sta costruendo un nuovo codice non si dovrebbero mai usare API deprecate. –

+22

@EthanAllen: sciocchezze. Per i principianti, è impossibile se si desidera supportare i dispositivi più vecchi. Ad esempio, non puoi creare un 'PreferenceActivity' che funzioni su API Livello 10 e sotto senza utilizzare metodi deprecati. È necessario prendere in considerazione gli avvisi di cancellazione caso per caso. * In generale * si desidera evitare metodi deprecati ove possibile. Ma "mai" sta sopravvalutando il caso. – CommonsWare

+0

eccellente analisi. Upvoted! –