2012-04-13 21 views
19

Actualicé mi android SDK a la última versión, y ahora dice que startManagingCursor() es deprecated. Necesito ayuda para actualizar mi código para usar el nuevo CursorLoader.Cómo (correctamente) la transición de startManagingCursor a CursorLoader?

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

Así, startManagingCursor() es viejo, lo que sería la nueva imagen de código similar, si se traduce?

+1

CursorLoader funciona además de ContentProvider ... Por lo tanto, no es posible "traducir" este código ... – Selvin

+0

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

+0

Es bueno tener en cuenta esta respuesta al método depreciado. Resulta que se ejecuta en el hilo principal, lo que ralentiza las cosas, es por eso que se depreció. [link] (http://stackoverflow.com/questions/19651680/cursorloader-with-startmanagingcursor) – Azurespot

Respuesta

16

Primero, startManagingCursor() todavía funciona. No es ideal, ya que realiza la E/S de la base de datos en el hilo principal de la aplicación. En Android, "obsoleto" generalmente significa "tenemos algo más que creemos que es mejor que sugerimos que use". Entonces, cuando tenga sentido en el ciclo de desarrollo de su aplicación, debería considerar migrar.

En segundo lugar, como señaló Selvin, el SDK solo proporciona una implementación Loader para un ContentProvider. Tengo a project that offers a Loader for SQLite directamente.

En tercer lugar, realmente no existe una "traducción" directa para su código. El marco Loader es asincrónico y controlado por eventos, mientras que su código no lo es.

En términos generales, su Loader serían responsables de ir a buscar las notas, y que poblaron su ListView en onLoadFinished(), cuando se entregan al Cursor del Loader.

+2

Solo para añadir un pensamiento aquí, si está compilando un código nuevo, nunca debería usar las API obsoletas. –

+22

@EthanAllen: tonterías. Para empezar, es imposible si quieres admitir dispositivos más antiguos. Por ejemplo, no puede crear una 'Actividad de preferencia' que funcione en el Nivel 10 de la API y debajo sin usar métodos obsoletos. Las advertencias de depreciación deben considerarse caso por caso. * Generalmente * desea evitar métodos obsoletos cuando sea posible. Pero "nunca" está exagerando el caso. – CommonsWare

+0

excelente análisis. ¡ACTUALIZADO! –

Cuestiones relacionadas