Red de conocimiento informático - Material del sitio web - Cómo utilizar ContentResolver

Cómo utilizar ContentResolver

Si desea exponer sus propios datos, hay dos formas:

1. Cree su propio ContentProvider, debe heredar la clase ContentProvider

2. Si su estructura de datos es consistente con la estructura de datos de ContentProvider existente, puede escribir los datos en el ContentProvider existente.

Por supuesto, la premisa es obtener el permiso para escribir el ContentProvider. la información de comunicación del miembro en OA con el sistema Contacta a ContentProvider

Conceptos básicos de ContentProvider

Todos los ContentProviders deben implementar la misma interfaz, que se utiliza para consultar ContentProvider y devolver datos. agregar, modificar y eliminar datos.

Pasos:

1. Obtenga una instancia de ContentResolver a través del método getContentResovler() del miembro de Actividad:

ContentResolver cr =. this.getContentResolver();

El método de la instancia de ContentResolver puede encontrar el ContentProvider especificado y obtener los datos del ContentProvider

Comienza el proceso de consulta de ContentResolver. El sistema Android determinará el específico. Se requiere ContentProvider para la consulta, confirme si está iniciado y ejecútelo.

El sistema Android es responsable de inicializar todos los ContentProviders y no requiere que los usuarios los creen ellos mismos. De hecho, los usuarios de ContentProvider no pueden acceder directamente. la instancia de ContentProvider y solo se puede enviar mediante proxy a través de ContentResolver.

p>

2. El modelo de datos

ContentProvider muestra datos como una única tabla de base de datos.

Entre ellos:

Cada fila tiene un número con un valor único. El campo, denominado _ID, se puede utilizar para localizar registros específicos en la tabla.

La estructura de datos devuelta por ContentProvider es un ResultSet similar a JDBC, es un objeto Cursor.

URI, cada ContentProvider define un URI público único, que se utiliza para especificar el conjunto de datos.

Un ContentProvider puede contener varios. conjuntos de datos (pueden considerarse como tablas múltiples), por lo tanto, es necesario que haya múltiples URI correspondientes a cada conjunto de datos.

Estos URI deben comenzar con este formato:

contenido:/ /

Indica que este URI especifica un ContentProvider.

Si desea crear su propio ContentProvider, es mejor configurar el URI personalizado como una constante de la clase. Esto simplificará. las llamadas de otras personas y será fácil actualizar el URI en el futuro.

android define constantes CONTENT_URI para el URI, como por ejemplo: android.provider.Contacts.Phones.CONTENT_URI

2. Consultar ContentProvider

Para utilizar un ContentProvider, se requiere la siguiente información:

Defina el URI de este ContentProvider, los nombres de los campos de los resultados devueltos y los tipos de datos de estos. campos

Si necesita consultar un registro específico (fila) del conjunto de datos de ContentProvider, también necesita conocer el valor del ID del registro.

Crear una consulta

La consulta consiste en ingresar parámetros como URI, donde el URI es obligatorio y otros son opcionales si el sistema puede encontrar el Cont correspondiente al URI.

entProvider devolverá un objeto Cursor.

Puede utilizar el método ContentResolver.query() o Activity.managedQuery().

Los parámetros de los dos métodos son exactamente los mismos. al igual que el proceso de consulta y el valor de retorno.

La diferencia es que a través del método Activity.managedQuery(), no solo se obtiene el objeto Cursor, sino que también se puede obtener el ciclo de vida del objeto Cursor. ser administrado.

Por ejemplo, cuando la actividad está en pausa (pausa) Cuando la actividad se reinicia, descargue el objeto Cursor y consúltelo nuevamente cuando se reinicie la actividad. Además, también puede crear un objeto Cursor que. no está bajo administración de actividad llamando al método Activity.startManaginCursor().

Similar a esto:

Cursor cur = wantedQuery(myPerson,null,null,null,null);

El primer parámetro myPerson es una instancia de tipo Uri.

Si necesita consultar los registros de una fila específica, debe usar el valor _ID. Por ejemplo, el valor de ID es. 23, y el URI será similar:

content://....../23

Android proporciona un método conveniente para que los desarrolladores no necesiten unir lo anterior Los propios URI, por ejemplo:

Uri myPerson = ContentUris.withAppendedId(People.CONTENT_URI,23);

O:

Uri myPerson = Uri.withAppendedPath( People.CONTENT_URI,"23");

La diferencia entre los dos es que recibe un valor de ID de tipo entero, un tipo de cadena receptora.

Varios otros parámetros:

names, que puede ser nulo, significa obtener todas las columnas del conjunto de datos o declarar una matriz de cadenas para almacenar las columnas, por ejemplo: People._ID. Generalmente, los nombres de las columnas tienen una correspondencia constante. el ContentProvider;

Para el filtro de los resultados devueltos, el formato es similar a la cláusula WHERE en SQL, la diferencia es que no hay una palabra clave WHERE, si se devuelve nulo, significa que no hay filtrado, como nombre=?;

El parámetro del filtro anterior es una matriz de cadenas, que es para el valor del marcador de posición en la condición anterior;

Los parámetros de clasificación son similares a la cláusula ORDER BY de SQL, pero no es necesario escribir la parte ORDER BY, como nombre desc. Si no desea ordenar, puede ingresar nulo.

El valor de retorno es un cursor. objeto, y la posición del cursor está en el primer registro Antes.

El siguiente ejemplo es aplicable a Android 2.0 y superior, para obtener el campo de nombre de la libreta de direcciones de Android:

java código:

Cursor cursor = getContentResolver( ).query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);

Leer los datos devueltos

Si se utiliza el ID en la consulta, los datos devueltos tienen solo un registro. En otros casos, generalmente hay varios registros. Similar al ResultSet de JDBC, es necesario operar el cursor para recorrer el conjunto de resultados. fila, puede obtener el valor de la columna a través del nombre de la columna. Puede usar getString(), getInt(), getFloat() y otros métodos para obtener valores.

Por ejemplo, es similar al siguiente. :

código java:

mientras(cursor.moveToNext()) {

b

uilder.append(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))).append("-");

}

Es diferente de JDBC , No hay forma de obtener el valor de la columna directamente a través del nombre de la columna. Solo puede obtener primero el valor del índice entero de la columna y luego usar el valor del índice para ubicar el valor de la columna.

Editar datos.

Las siguientes funciones de edición se pueden lograr a través de ContentProvider:

Agregar nuevos registros:

Agregar nuevos valores a registros existentes, actualizar por lotes varios registros existentes. Eliminar registros.

Todas las funciones de edición se implementan a través de métodos ContentResolver. Algunos ContentProviders tienen requisitos de permisos más estrictos y requieren permisos de escritura. De lo contrario, se informará un error.

Agregar registros

p>

Para agregar registros al ContentProvider, primero, establezca un par clave-valor similar a un mapa en el objeto ContentValues. Aquí, el valor de la clave corresponde al nombre de la columna en el ContentProvider. El valor del par clave-valor es el tipo deseado de la columna correspondiente.

Luego, llame al método ContentResolver.insert() y pase el objeto ContentValues ​​​​y el URI correspondiente al ContentProvider. El valor de retorno es el objeto URI de este nuevo registro. De esta manera puede obtener el objeto Cursor que contiene este registro a través de este URI.

Por ejemplo:

código java:

ContentValues ​​​​valores = new ContentValues();

values.put(People.NAME,"Abraham Lincoln");

Uri uri = getContentResolver() .insert(People.CONTENT_URI, valores);

En el registro original Agregar valor

Si el registro ya existe, puede agregar un nuevo valor al registro o editar el existente. valor.

Primero busque el objeto de valor original y luego borre el valor original. Si hay un valor, agregue un registro como se muestra arriba:

Código Java:

.

Uri uri = Uri.withAppendedPath(People.CONTENT_URI, "23");

Uri phoneUri = Uri.withAppendedPath(uri, People.Phones.CONTENT_DIRECTORY);

valores .clear();

valores.put(Personas.Teléfonos.TIPO, Personas .Teléfonos.TYPE_MOBILE);

valores.put(Personas.Teléfonos.NÚMERO, "1233214567") ;

getContentResolver().insert(phoneUri, valores);

Actualizar valores por lotes

Actualizar por lotes los valores de un grupo de registros, por ejemplo , NY pasa a llamarse Eew York. Puede llamar al método ContentResolver.update().

Eliminar registros

Si está eliminando un solo registro, llame a ContentResolver.delete(). y especifique el parámetro URI para la fila específica.

Si está eliminando varios registros, llame al método ContentResolver.delete() y al URI. Simplemente especifique el proveedor de contenido como parámetro y traiga un SQ como

Condición de la cláusula WHERE de L. Esto es similar a lo anterior, sin la palabra clave WHERE.

Crea tu propio proveedor de contenido

Para crear un proveedor de contenido, necesitas configurar un sistema de almacenamiento. Los ContentProviders utilizan archivos o bases de datos SQLite, pero puede almacenar datos de cualquier forma. Android proporciona SQLiteOpenHelper para ayudar a los desarrolladores a crear y administrar SQLiteDatabase.

Heredar ContentProvider para proporcionar acceso a los datos. la clase ContentProvider

Se debe definir una subclase de la clase ContentProvider y se deben implementar los siguientes métodos:

código java:

query()

insertar()

actualizar()

eliminar()

getType()

onCreate()

Al implementar la subclase, hay algunos pasos para simplificar el uso de los clientes ContentProvider:

Defina una constante Uri final estática pública denominada CONTENT_URI:

código Java:

Uri final estática pública CONTENT_URI = Uri.parse("content://com.example.codelab.transportationprovider");

Si hay varias tablas, también usan el mismo CONTENT_URI , pero sus partes de ruta son diferentes.

Declarar ContentProvider

Después de crear un ContentProvider, debe declararse en el archivo de manifiesto para que el sistema Android pueda saberlo. creado o llamado cuando otras aplicaciones necesitan llamar a ContentProvider.

p>

La sintaxis es similar:

android:authorities="com.easymorse.cp.mycp"

android:name debe escribirse con el nombre completo del ContentProvider clase de herencia.

Android: las autoridades deben escribirse con la parte B de la constante CONTENT_URI

Reimpreso solo como referencia. Te deseo una vida feliz y acéptala si estás satisfecho. .