¿Cómo compartir datos entre múltiples actividades en Android?
1 Utilice SharedPreferences para almacenar datos.
2 Datos de almacenamiento de archivos
3 Datos de almacenamiento de base de datos SQLite
4 Utilice ContentProvider para almacenar datos
5 Datos de almacenamiento de red
Se implementan diferentes lógicas o requisitos de negocios de diferentes maneras.
Las siguientes son explicaciones y métodos de almacenamiento de datos en estas áreas.
Primero, utilice SharedPreferences para almacenar datos.
SharedPreferences es una clase de almacenamiento liviana en la plataforma Android, que guarda principalmente algunas configuraciones comunes, como el estado de la ventana.
Generalmente, el estado de la ventana onSaveInstanceState está sobrecargado en la actividad y generalmente se guarda usando SharedPreferences.
Proporciona clonación de almacenamiento tradicional de enteros largos, enteros y cadenas en la plataforma Android.
¿Qué tipo de tratamiento es? SharedPreferences es similar al archivo de configuración ini en los sistemas Windows anteriores, pero está dividido en múltiples permisos.
Puede * * * globalmente, Android123 le indica que finalmente se guarda en modo xml y la eficiencia general no es particularmente alta.
Para el peso ligero tradicional, es mucho mejor que SQLite. Si la capacidad de almacenamiento es realmente pequeña, considere definir su propio formato de archivo.
Al procesar xml, Dalvik lo analizará a través de su propio analizador XML local, como XMLpull, que es mejor para los recursos de memoria.
Su esencia es almacenar datos de pares clave-valor basados en archivos XML, que generalmente se utilizan para almacenar información de configuración simple.
Su ubicación de almacenamiento es /data/data/
El objeto SharedPreferences en sí solo puede obtener datos y no admite almacenamiento ni modificación. Las modificaciones de almacenamiento se implementan a través del objeto editor.
Los pasos para implementar el almacenamiento SharedPreferences son los siguientes:
1. Obtener el objeto SharedPreferences según el contexto.
En segundo lugar, utilice el método edit() para obtener el objeto editor.
3. Almacene datos de pares clave-valor a través del objeto editor.
Cuarto, envíe datos a través del método commit().
El siguiente es el código de muestra:
La clase pública MainActivity extiende la actividad {
@Override
public void al crear (paquete guardado instanciastate) {
super .oncreate(savedInstanceState);
setContentView(r . layout . main
//Obtener el objeto SharedPreferences
Contexto ctx = MainActivity.this
preferencias compartidas SP = CTX . getsharedpreferences(" SP ", MODE _ PRIVATE
//Datos de almacenamiento
editor editor = sp .edit();
editor.putString("STRING_KEY", "STRING");
editor.putInt("INT_KEY", 0); p>
editor.putBoolean("BOOLEAN_KEY ", true);
editor commit();
//Devuelve el valor de STRING_KEY.
Log.d("SP",sp.getString("STRING_KEY","none"));
//Si NOT_EXIST no existe, el valor de retorno es "none" "
Log.d("SP ", sp.getString("NOT_EXIST ", " ninguno "));
}
}
Después de ejecutar este código, se generará un archivo SP.xml en el directorio /data/data/com.test/shared_prefs. Una aplicación puede crear varios archivos xml.
En comparación con la base de datos SQLite, el objeto SharedPreferences es más conveniente y conciso, eliminando la necesidad de crear bases de datos, crear tablas, escribir declaraciones SQL y muchas otras operaciones.
Pero SharedPreferences también tiene sus propias deficiencias, como su capacidad para almacenar cinco tipos de datos simples: booleano, int, flotante, largo y String. Por ejemplo, no puede realizar consultas condicionales.
Entonces, no importa cuán simple sea la operación de almacenamiento de datos de SharedPreferences, solo puede ser un complemento del método de almacenamiento y no puede reemplazar completamente otros métodos de almacenamiento de datos, como la base de datos SQLite.
Segundo tipo: Datos de almacenamiento de archivos.
En cuanto al almacenamiento de archivos, Activity proporciona el método openFileOutput(), que se puede utilizar para enviar datos a un archivo. El proceso de implementación específico es el mismo que guardar datos en archivos en el entorno J2SE.
Los archivos se pueden utilizar para almacenar grandes cantidades de datos, como texto, imágenes, audio, etc.
Ubicación predeterminada:/data/data/
Ejemplo de código:
Guardado de anulación pública(){
Probar{
flujo de salida del archivo = this . openfile salida(" a . txt ", context. mode_world_readable
outStream.write(text.getText().toString( ).getBytes()); );
fuera de flujo. close();
Toast.makeText(MyActivity.this, "guardar", Toast.length_long).
show();
} catch(archivo no encontrado excepción e){
return;
}
catch (IOException e) {
Return;
}
}
El primer parámetro del método openFileOutput() se utiliza para especificar el nombre del archivo y no puede contener el separador de ruta "/". Si el archivo no existe, Android lo creará automáticamente.
Los archivos creados se guardan en el directorio /data/data//files, como /data/data/cn . > Haga clic una vez en la ventana del menú de Eclipse-Mostrar vista-Otros y expanda la carpeta de Android en la ventana de diálogo.
Seleccione la vista del Explorador de archivos a continuación y expanda el directorio /data/data//files en la vista del Explorador de archivos para ver el archivo.
El segundo parámetro del método openFileOutput() se utiliza para especificar el modo de operación. Hay cuatro modos, a saber:
Contexto. MODE_PRIVATE = 0
Contexto. MODE_APPEND = 32768
Contexto. MODE_WORLD_READABLE = 1
Contexto. MODE_WORLD_WRITEABLE = 2
Contexto. MODE_PRIVATE: es el modo de funcionamiento predeterminado, lo que significa que el archivo son datos privados y solo la propia aplicación puede acceder a ellos. En este modo, lo que se escribe sobrescribe el contenido del archivo original. Si desea que el contenido recién escrito se agregue al archivo original. Puedes usar el contexto. modo_append.
Contexto. MODE_APPEND: el modo comprobará si el archivo existe y, si existe, agregará el contenido al archivo; de lo contrario, se creará un nuevo archivo.
Contexto. Mode_world_readable y contexto. mode_world_writable se utiliza para controlar si otras aplicaciones tienen permiso para leer y escribir el archivo.
MODE_WORLD_READABLE: Indica que el archivo actual puede ser leído por otras aplicaciones;
Modo_world_writable: Indica que el archivo actual puede ser escrito por otras aplicaciones.
Si desea que otras aplicaciones lean y escriban el archivo, puede pasar: salida de openfile ("itcast.txt", contexto . modo _ mundo _ legible+context . modo _ mundo _ escritura ); Android tiene su propio modelo de seguridad. Cuando se crea una aplicación (.apk), el sistema le asignará una identificación de usuario. Cuando una aplicación quiere acceder a otros recursos, como archivos, requiere una coincidencia de ID de usuario. De forma predeterminada, todos los archivos creados por aplicaciones, preferencias compartidas y bases de datos deben ser privados (ubicados en /data/data//files) y otros programas no pueden acceder a ellos.
A menos que especifiques un contexto. mode_world_readable o contexto. mode_world_writable cuando lo creas, solo para que otros programas puedan acceder a él correctamente.
Ejemplo de lectura de un archivo:
public void load(){
Prueba {
file inputstream inStream = this openfile input. (" a . txt ");
ByteArrayOutputStream = nuevo ByteArrayOutputStream();
byte[]buffer = nuevo byte[1024]; -1;
mientras((longitud = instream . read(buffer))!=-1) {
stream.write(buffer, 0, length);
p>
}
corriente .close();
instream .
texto . ));
Toast.makeText(MyActivity.this, "Cargado", Toast. length_long). show();
} catch(archivo no encontrado excepción e){
e . printstacktrace();
}
catch. (IOException e){
Return;
}
}
Solo la aplicación que creó el archivo puede acceder a los archivos privados .
Si desea que otras aplicaciones lean y escriban el archivo,
puede especificar un contexto. Permisos MODE_WORLD_READABLE y context.mode_world_writable al crear el archivo.
La actividad también proporciona los métodos getCacheDir() y getFilesDir():g.
El método etCacheDir() se utiliza para obtener el directorio /data/data//cache y el método getFilesDir() se utiliza para obtener el directorio /data/data//files.
Guarde el archivo en la tarjeta SD:
Utilice el método openFileOutput() de Activity para guardar el archivo, que se almacena en el espacio del teléfono móvil.
Generalmente, el espacio de almacenamiento de los teléfonos móviles no es muy grande. Está bien almacenar algunos archivos pequeños, pero no es factible almacenar archivos grandes como vídeos.
Para archivos grandes como vídeos, podemos almacenarlos en una tarjeta SD.
¿Qué hace la tarjeta SD? Puedes considerarlo como un disco duro móvil o una unidad flash USB.
Para usar la tarjeta SD en el simulador, primero debe crear una tarjeta SD (por supuesto, no una tarjeta SD real, solo un archivo de imagen).
La creación de una tarjeta SD se puede realizar cuando Eclipse crea el simulador, o se puede realizar mediante comandos de DOS.
De la siguiente manera: ingrese el directorio de herramientas de la ruta de instalación del SDK de Android en la ventana Dos.
Ingrese el siguiente comando para crear una tarjeta SD con una capacidad de 2G. sé lo que quieras.
Recomendado. img:mksd card 2048m d:\ Android tool \ sdcard. img accede a la tarjeta SD en el programa. Debe solicitar permiso para acceder a la tarjeta SD.
Agregue el permiso para acceder a SDCard en AndroidManifest.xml, como se muestra a continuación:
& lt! -Permiso para crear y eliminar archivos en la tarjeta SD->
& ltuses-permission Android:name="Android.permission.mount_UNMOUNT_filesystems"/> <! -Permiso para escribir datos en la tarjeta SD->
<uses-permission Android:name = " Android . permiso . escribir _ EXTERNO _ ALMACENAMIENTO "/& gt;
Para almacenar archivos En SDCard, el programa primero debe determinar si el teléfono está equipado con SDCard y si puede leer y escribir.
Nota: Para acceder a SDCard, debes agregar permiso para acceder a SDCard en AndroidManifest.xml
if (environment . getexternalsragestate(). Equals (environment. MEDIA_MOUNTED)) {
archivo sdCardDir = entorno . getexternalstrauredirectory(); //Obtener el directorio SDCard
Archivo saveFile = new File(sdCardDir, " a . txt "); flujo de salida = flujo de salida de nuevo archivo (guardar archivo);
outStream.write("test ".getBytes());
flujo de salida close();
}
Métodos ambientales. getExternalStorageState() se utiliza para obtener el estado de la tarjeta SD. Si el teléfono tiene una tarjeta SD y puede leer y escribir, el estado devuelto por este método es igual al del entorno. Instalación de medios.
Métodos ambientales. getExternalStorageDirectory() se utiliza para obtener el directorio de SDCard. Por supuesto, para obtener el directorio de la tarjeta SDC, también puedes escribir:
Archivo sdCardDir = nuevo archivo ("/tarjeta SD" //Obtener el directorio de la tarjeta SDC
Archivo saveFile =); new File( sdCardDir, "it cast . txt ");
//Los dos códigos anteriores se pueden combinar en una oración:
File save File = new File("/SD card/a . txt ");
flujo de salida del archivo flujo de salida = nuevo flujo de salida del archivo (guardar archivo);
outStream.write("test ".getBytes());
out stream. close();
Tercer tipo: base de datos SQLite para almacenar datos
SQLite es un motor de base de datos integrado liviano que admite el lenguaje SQL.
Y solo requiere un poco de memoria y tiene buen rendimiento.
Además, es de código abierto y puede ser utilizado por cualquier persona.
Muchos proyectos de código abierto (Mozilla, PHP, Python) utilizan SQLite.
SQLite consta de los siguientes componentes: compilador SQL, kernel, backend y complementos.
SQLite hace que la depuración, modificación y extensión del kernel SQLite sea más conveniente mediante el uso de máquinas virtuales y motores de bases de datos virtuales (VDBE).
Características:
Para dispositivos con recursos limitados,
Si no hay un proceso de servidor,
todos los datos se almacenan en el mismo archivo, multiplataforma,
se puede copiar libremente.
SQLite básicamente cumple con el estándar SQL-92 y no se diferencia de otras bases de datos SQL convencionales. Su ventaja es la alta eficiencia y el entorno de ejecución de Android contiene SQLite completo.
La mayor diferencia entre SQLite y otras bases de datos es la compatibilidad con tipos de datos. Al crear una tabla, puede especificar el tipo de datos de una columna en la instrucción CREATE TABLE, pero puede colocar cualquier tipo de datos en cualquier columna. Cuando se inserta un valor en la base de datos, SQLite verificará su tipo. Si el tipo no coincide con la columna asociada, SQLite intentará convertir el valor al tipo de columna. Si la conversión no es posible, el valor se almacena como su propio tipo. Por ejemplo, puede colocar una cadena en una columna de números enteros. SQLite llama a esto "escritura de lista". Además, SQLite no admite algunas funciones SQL estándar, especialmente restricciones de clave externa, transacciones anidadas, uniones externas derechas y uniones externas completas, y algunas funciones ALTER TABLE. Además de las funciones anteriores, SQLite es un sistema SQL completo con activadores, transacciones, etc.
Android integra base de datos SQLite. Android integra SQLite en tiempo de ejecución, por lo que cada aplicación de Android puede utilizar una base de datos SQLite.
Para los desarrolladores familiarizados con SQL, usar SQLite en el desarrollo de Android es bastante sencillo. Sin embargo, JDBC consume demasiados recursos del sistema, por lo que JDBC no es adecuado para teléfonos móviles con memoria limitada. Por lo tanto, Android proporciona algunas API nuevas para usar bases de datos SQLite y los programadores deben aprender a usar estas API en el desarrollo de Android.
La base de datos se almacena en data/ /databases/. El uso de actividades de base de datos SQLite en el desarrollo de Android le permite acceder a la base de datos a través de un proveedor o servicio de contenido.
A continuación se explicará en detalle cómo crear una base de datos, agregar datos y consultar la base de datos. Crear una base de datos Android no proporciona una base de datos automáticamente. Para usar SQLite en una aplicación de Android, debe crear su propia base de datos y luego crear tablas, índices y datos.
Android proporciona SQLiteOpenHelper para ayudarte a crear una base de datos. Al heredar la clase SQLiteOpenHelper, puede crear fácilmente una base de datos. La clase SQLiteOpenHelper encapsula la lógica utilizada para crear y actualizar la base de datos según las necesidades de la aplicación desarrollada.
La subclase de SQLiteOpenHelper necesita implementar al menos tres métodos:
1 Constructor, que llama al constructor de la clase principal SQLiteOpenHelper. Este método toma cuatro parámetros: el contexto (por ejemplo, una actividad), el nombre de la base de datos, una fábrica de cursores opcional (normalmente nula) y un número entero que representa la versión del modelo de base de datos utilizada.
2 método onCreate(), que requiere un objeto SQLiteDatabase como parámetro, llena la tabla e inicializa los datos para el objeto según sea necesario.
Método 3 onUpgrage(), este método requiere tres parámetros, un objeto SQLiteDatabase, un número de versión anterior y un número de versión nueva, para que puedas saber cómo cambiar una base de datos del modelo antiguo al nuevo. modelo.
El cuarto método de utilizar ContentProvider para almacenar datos. ContentProvider en realidad almacena datos a través de la base de datos, que no se describirá en detalle aquí.
La quinta red almacena datos, lo que significa que los datos se almacenan en el servidor. En Android, solo necesita realizar una solicitud a través de httpclient para obtener datos del servidor.