2011-04-08 8 views
7

Tengo dos datos que deben accederse desde aplicaciones externas y almacenarse. Según la documentación, ContentProviders es la única forma posible, pero también menciona el almacenamiento externo. ContentProviders implementa una "interfaz" similar a una base de datos y usar una base de datos sería extremadamente innecesario para dos datos. Preferiría guardarlos en un archivo, pero usar ContentProvider implementando los métodos abstractos es problemático porque los métodos están estructurados como consultas de bases de datos.ContentProvider sin SQL

Sé que no hay nada que especifique que ContentProviders debe usar una base de datos debajo para almacenar datos, pero ¿hay alguna otra forma de almacenar una cantidad mínima de datos que se deben compartir en el sistema de archivos?

Respuesta

6

Acabo de usar MatrixCursor para resolver ese problema exacto. Mira esto.

Editar: Lo siento, había escaneado la pregunta cuando respondí. ContentProvider es la única forma en que las aplicaciones pueden compartir datos. Las actividades dentro de una Aplicación pueden usar SharedPreferences para datos más pequeños, con la adición de persistencia.

Editar v2: Aquí está la función que utilicé para completar un MatrixCursor para la función de consulta de ContentProvider. Estoy usando una vista predefinida que creé que devuelve un conjunto de valores distintos, y esto configura un cursor con _ids que puedo pasar a mi ExpandableListView.

private Cursor getFactions() { 
     MatrixCursor mc = new MatrixCursor(Model.Faction.PROJECTION); 
     SQLiteDatabase db = dbHelper.getReadableDatabase(); 
     Cursor c = db.query(MODELFACTION_TABLE_NAME, new String[] { Model.Faction.FACTION }, null, null, null, null, Model.Faction.FACTION + " ASC"); 
     c.moveToFirst(); 
     do { 
      mc.addRow(new Object[] { c.getPosition(), c.getString(c.getColumnIndex(Model.Faction.FACTION))});    
     } while (c.moveToNext() && ! c.isAfterLast()); 
     c.close(); 
     db.close(); 
     return mc; 
    } 
+0

Bueno, yo necesitan compartir datos entre aplicaciones, así que supongo que necesitaré ContentProviders . MatrixCursor se ve prometedor debido a la capacidad de almacenar objetos, pero supongo que MatrixCursor debe estar respaldado por un DB en algún lugar sí? –

+0

¡No, en absoluto! Acabo de crear MatrixCursor y agregué los elementos. No se necesita DB. Cuando instancia un MatrixCursor, proporciona un String [] de nombres de campo o columnas, luego solo agrega los conjuntos de datos o las filas. De dónde obtienes esos datos depende completamente de ti. –

+1

Terminó usando un cursor matriz con entrada/salida de archivo estándar debajo. Luego, lea la información utilizando ContentResolver.query() y guárdela en un cursor. ¡Gracias por la ayuda! –

1

La clase SharedPreferences proporciona un marco general que le permite guardar y recuperar pares de valores clave persistentes de los tipos de datos primitivos. Puede utilizar SharedPreferences para salvar cualquier dato primitivo: booleanos, flota, enteros, largos, y cadenas. Estos datos en distintas sesiones de usuario (incluso si su aplicación se mató)

Enlaces útiles:

http://developer.android.com/reference/android/content/SharedPreferences.html

http://developer.android.com/guide/topics/data/data-storage.html

Cuestiones relacionadas