Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


CursorLoader para varios ContentProviders

Necesito crear un ListAdapter que presente datos de varios ContentProviders. Los propios ContentProviders representan una tabla cada una de la base de datos relacional.

Quiero utilizar el sistema CursorLoader para recuperar datos agregados en ListView. ¿Es esto posible hacer con 1 cargador o necesito utilizar cargadores múltiples? Prefiero usar uno.

  • Período de tiempo de ejecución de Marshmallow
  • Verde DAO vs ORM lite vs Android activo
  • Mejores Prácticas para el Manejo de la Búsqueda
  • SQlite - Android - Sintaxis de clave extranjera
  • Dentro de Android Dialog, cómo configurar onActivityResult para startActivityForResult?
  • Cómo animar un camino en el lienzo - android
  • No estoy seguro de cómo puedo tener 2 ContentProviders interactuar entre sí más allá de hacer la combinación manualmente en código que no parece una gran opción tampoco.

  • ¿Cómo puedo obtener mi APP_KEY y SECRET_KEY para la sincronización de Dropbox?
  • Android fastScroll sólo cubre parte de la lista
  • Cómo guardar la clave del API en gradle.properties
  • ¿Familia de fuentes segura para Android WebView?
  • 12 mb datos de texto de descarga de url y guardar en la tarjeta sd ... Heap memoria prob ocurren. ¿alguna solución?
  • Vídeo inverso en android
  • 3 Solutions collect form web for “CursorLoader para varios ContentProviders”

    Tendrás que escribir una clase de cargador personalizado. Por ejemplo:

    public class FooLoader extends AsyncTaskLoader { Context context; public FooLoader(Context context) { super(context); this.context = context; } @Override public Cursor loadInBackground() { Log.d(TAG, "loadInBackground"); YourDatabase dbHelper = new YourDataBase(context); SQLiteDatabase db= dbHelper.getReadableDatabase(); /*** create a custom cursor whether it is join of multiple tables or complex query**/ Cursor cursor = db.query(<TableName>, null,null, null, null, null, null, null); return cursor; } } 

    En el método onCreate() la actividad llamante o fragmentos, tendría que llamar a la clase loader personalizada:

     public class MyFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate():" + mContent); Loader loader = getLoaderManager().initLoader(0, null, this); loader.forceLoad(); } @Override public Loader<Cursor> onCreateLoader(int i, Bundle bundle) { Log.d(TAG, "onCreateLoader()") ; return new FooLoader(getActivity()); } @Override public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) { Log.d(TAG, "onLoadFinished"); } @Override public void onLoaderReset(Loader<Cursor> cursorLoader) { } } 

    Es posible que desee echar un vistazo a CursorJoiner.

    Soy nuevo en ContentLoaders, pero aún no he visto una manera en la que podría utilizar un ContentLoader para manejar varios ContentProviders.

    ¿Son las tablas que está consultando en bases de datos separadas? No está claro de su pregunta. Si las tablas están todas en la misma base de datos, una alternativa podría ser utilizar en lugar de otro ContentProvider para las tablas separadas. Los datos se pueden unir y devolver a un cursor, lo que significa que podría utilizar un CursorLoader. El método SQLiteQueryBuilder.setTables () tiene información sobre esto:

    http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html#setTables%28java.lang.String%29

    Y se puede ver en acción aquí:

    http://code.google.com/p/openintents/source/browse/trunk/shoppinglist/ShoppingList/src/org/openintents/shopping/provider/ShoppingProvider.java

    Esto también podría ser útil: https://stackoverflow.com/a/3196484/399105

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.