2012-03-15 22 views
7

Estoy intentando crear un proveedor de contenido que use almacenamiento interno. Sin embargo, todos los ejemplos que veo en línea solo usan sqlite.Ejemplos de proveedores de contenido que no usan SQLite

¿Alguien puede proporcionarme un buen tutorial o ejemplo de cómo crear un proveedor de contenido utilizando almacenamiento interno?

+0

Defina lo que quiere decir con "un proveedor de contenido que usa almacenamiento interno", teniendo en cuenta que SQLite generalmente usa almacenamiento interno, pero no desea SQLite. – CommonsWare

+0

@CommonsWare Según la página de desarrollo de Android, existen 5 formas de almacenar datos: Preferencias compartidas, almacenamiento interno, almacenamiento externo, bases de datos SQLite y conexión de red. Quiero que mi proveedor de contenido use la opción Almacenamiento interno. – drum

+0

El almacenamiento interno en ese contexto significa almacenar cosas en archivos en el área de datos privados de su aplicación. No es realmente una API como tal. Dado que los datos basados ​​en SQLite se almacenan como un archivo en el área de datos privada de su aplicación, debe estar haciendo algo muy especial para que valga la pena, ya que usar SQLite generalmente es más fácil (y más rápido). –

Respuesta

4

Puede almacenar datos en archivos, utilizando los métodos de archivos para proveedores de contenido como openTypedAssetFile(). Esto devuelve un AssetFileDescriptor (es decir, un identificador de archivo que es válido para todos los procesos) en lugar de un Cursor.

En general, la pregunta es muy difícil de responder. Un proveedor de contenido es una "interfaz" entre un repositorio de datos y clientes. La documentación no dice mucho sobre repositorios distintos de SQLite porque a) el modelo de proveedor de contenido está organizado según las líneas de una base de datos relacional yb) cada implementación de un proveedor de contenido va a ser diferente.

No dudo en dar más consejos antes de conocer sus requisitos exactos. Puede ser que pueda beneficiarse de SQLite, aunque puede que no vea de inmediato por qué. También puede estar en lo cierto: SQLite no es la solución, pero con más información podría proponer algunas ideas.

+0

Veo lo que dices. Además, parece que algunas de las funciones de ContentProvider requieren una base de datos. He estado tratando de encontrar formas de implementar la función query(), pero dado que debe devolver un objeto Cursor, supongo que SQLite es imprescindible en este caso. – drum

+1

Buscar [esto] (https://android.googlesource.com/platform/packages/providers/WebSearchProvider/+/8637dd8dc1b255052b2615430bfb4603fa8711f7/src/com/android/websearch/SuggestionProvider.java) no use SQLIte. La fuente de datos es JSONArray. Podemos aprender a crear un Cursor extender AbstractCursor. – Yeung

0

Bueno, sé lo que estás tratando de hacer, tal vez crear imágenes, películas o, por ejemplo, con almacenamiento interno.

Puede usar InternalStorage para almacenar bytes de datos. Si usted tiene los bytes que sólo puede hacer:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

para sacarlo:

File file = ... 
    OutputStream out = null; 
    try { 
    out = new BufferedOutputStream(new FileOutputStream(file)); 
    ... 
    finally { 
    if (out != null) { 
     out.close(); 
    } 
    } 

Todas las fuentes se encuentran en this y this. No puedo ayudarte más que esta porque nunca lo intenté.

+0

Sí, ya lo hice visto esta página. Sin embargo, esto no funciona en el proveedor de contenido. – drum

1

Hay un ejemplo llamado FileProvider.java en las muestras de Android SDK que utiliza ContentProvider pero no la base de datos SQLite.

Cuestiones relacionadas