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

Cómo utilizar SharedPreferences correctamente

Por cierto, repasemos SharedPreferences:

SharedPreferences es una API integrada en Android que nos permite acceder a datos de tipo básico en forma de pares clave-valor, como : booleano, flotante, int, largo, cadena. Estos datos persistirán incluso después de que finalice su aplicación (nota: si la aplicación se cancela del teléfono, las SharedPreferences correspondientes a la aplicación desaparecerán y se guardarán en la ruta: /data/data/lt; package_namegt ;/shared_prefs directorio)

Nota: Configuración de usuario de Preferencias de usuario

Estrictamente hablando, es mejor no utilizar SharedPreferences para guardar "configuraciones de usuario", por ejemplo, qué tonos de llamada ha elegido el usuario o si actualizar automáticamente. etcétera. Si desea crear una configuración de usuario para su aplicación, puede usar PreferenceActivity, que se puede usar para crear "configuraciones de usuario". (PreferenceActivity se utiliza para crear la interfaz de configuración en el programa)

¿Cómo obtener SharedPreferences en la aplicación? Hay dos métodos:

getSharedPreferences(nombre, modo): utilice este método si su aplicación requiere múltiples archivos de preferencias. El primer parámetro de este método se utiliza para distinguir diferentes archivos de preferencias.

Por ejemplo:

SharedPreferences sp1 = getSharedPreferences("sp_1", Context.MODE_PRIVATE);

SharedPreferences sp2 = getSharedPreferences("sp_2", Context.MODE_PRIVATE); ) ;

Son dos archivos de configuración diferentes para una misma aplicación.

El segundo parámetro de este método admite los siguientes valores:

Context.MODE_PRIVATE: especifica que los datos de SharedPreferences solo pueden ser leídos por esta aplicación o aplicaciones con el mismo ID de usuario. Escribir.

Context.MODE_WORLD_READABLE: Especifica que los datos de SharedPreferences pueden ser leídos por otras aplicaciones, pero no escritos.

Ya no se recomienda el uso de esta variable después de API 17. La creación de archivos legibles en todo el mundo es muy peligrosa y puede provocar vulnerabilidades de seguridad en el programa. La interacción entre programas debe utilizar métodos más formales, como ContentProvider, BroadcastReceiver y Service. Cuando se realiza una copia de seguridad y se restaura el programa, no hay garantía de que este método de adquisición siga siendo válido para el archivo. Modo de creación de archivos: permite que todos los demás programas lean el archivo creado.

Context.MODE_WORLD_WRITEABLE: Especifica que los datos de SharedPreferences pueden ser leídos y escritos por otras aplicaciones.

Ya no se recomienda el uso de esta variable después de API 17.

Es muy peligroso crear archivos grabables globalmente, lo que provocará agujeros de seguridad en el programa. La interacción entre programas debe utilizar canales más formales, como: ContentProvider, BroadcastReceiver y Service. Cuando se realiza una copia de seguridad y se restaura el programa. No hay garantía de que este método de adquisición siga siendo efectivo para los archivos. Modo de creación de archivos: permite que todos los demás programas modifiquen los archivos creados.

Context.MODE_MULTI_PROCESS

Agregado en API11, indicador de carga SharedPreferences: cuando se establece, los archivos en el disco duro se verificarán si la instancia actual de SharedPreferences se ha modificado cuando se modifican. cargando en el proceso. Esta situación suele ocurrir cuando el programa tiene múltiples procesos modificando el mismo archivo SharedPreferences. En términos generales, este método funciona muy bien cuando interactúa entre procesos.

Antes de API 2.3, esta etiqueta existía de forma predeterminada cuando se lanzaba una versión. Al compilar con SDK 2.3 o superior, si desea utilizarlo, debe configurarlo explícitamente.

getPreferences(): utilice este método si su actividad solo necesita un archivo de preferencias. Debido a que su Actividad solo necesita un archivo de preferencias, no necesita proporcionar un nombre.

¿Cómo escribir datos en SharedPreferences?

1. Necesita obtener el objeto de edición de SharedPreferences: SharedPreferences.Editor: use edit().

Por ejemplo: SharedPreferences.Editor editor = sp1.edit();

2. Utilice el método putXXX() para escribir datos en las preferencias:

Para ejemplo: editor.putXXX("key", value);

3 Envíe datos al archivo de preferencias:

Por ejemplo: editor.commit();

¿Qué pasa con la lectura de datos?

Utiliza métodos como getXXX() para leer.

Por ejemplo:

boolean silent = settings.getBoolean("silentMode", false);

La siguiente es una demostración proporcionada por Google doc:

[java] ver Plaincopyprint?

clase pública Calc extiende Actividad {

cadena final estática pública PREFS_NAME = "MyPrefsFile"

@Override;

p>

void protegido onCreate(estado del paquete){

super.onCreate(estado);

. > // Restaurar preferencias

p>

Configuración de SharedPreferences = getSharedPreferences(PREFS_NAME, 0);

boolean silent = settings.getBoolean("silentMode", false

setSilent(silent);

p>

}

@Override

protected void onStop(){

super.onStop();

// Necesitamos un objeto Editor para realizar cambios de preferencias

// Todos los objetos son de android.context.Context

<. p> Configuración de SharedPreferences = getSharedPreferences(PREFS_NAME, 0);

SharedPreferences.Editor editor = settings.edit()

editor.putBoolean("silentMode", mSilentMode

p>

// ¡Comprueba las ediciones!

editor.commit();

}

}

A continuación, mira en la documentación sobre preferencias compartidas en Google doc.

SharedPreferences en sí es una interfaz utilizada para obtener y modificar los datos de configuración del programa, ubicada en: android.content.SharedPreferences. El programa no puede crear directamente instancias de SharedPreferences y solo puede obtener instancias de interfaz a través de getSharedPreferences (String, int) de conext.

Nota: La clase actual no admite llamadas entre procesos y será compatible en versiones posteriores.

Proporciona los siguientes métodos para acceder a los datos de preferencias:

booleano contiene (clave de cadena): determina si las preferencias actuales contienen los datos correspondientes a la clave.

resumen SharedPreferences.Editor edit(): Crea un nuevo Editor para preferencias, para que puedas modificar los datos de preferencias y enviarlos al objeto SharedPreferences.

maplt abstracto; String, ?gt; getAll(): Obtiene todos los datos contenidos en las preferencias.

resumen XXX getXXX(String key, boolean defValue): Obtiene el valor correspondiente a la clave especificada en preferencias. Si la clave no existe, se devuelve el valor predeterminado, donde XXX es el tipo de datos básico: booleano, flotante, int, largo, cadena, etc.

La interfaz SharedPreferences en sí no proporciona la capacidad de escribir datos, pero a través de la interfaz interna de SharedPreferences, SharedPreferences puede obtener su objeto Editor correspondiente llamando al método edit().

El editor proporciona los siguientes métodos para escribir datos en las preferencias:

abstract SharedPreferences.Editor clear()

Marcar en el editor: borra todas las preferencias y guarda los datos. . (Tenga en cuenta que este método no lo borra sustancialmente, simplemente lo marca en el Editor y requiere una confirmación antes de que pueda borrarse verdaderamente)

compromiso booleano abstracto():

Modificaciones del editor a preferencias se envían al objeto SharedPreferences para completar la modificación de los datos en preferencias.

resumen SharedPreferences.Editor putXXX(Clave de cadena, valor booleano)

Guardar clave y sus datos correspondientes lt;valor-clavegt; Entre ellos, xxx puede ser valores de varios tipos básicos, como booleano, flotante, int, largo y cadena.

Resumen SharedPreferences.Editor remove(String key):

Marque en el Editor que el par clave-valor con la clave en la preferencia debe eliminarse y la acción de eliminación real se realizará. se aplicará a las preferencias reales después de ejecutar commit().

Cómo leer SharedPreferences de otras aplicaciones:

Como se mencionó anteriormente, si desea leer y escribir SharedPreferences de otras aplicaciones, la premisa es que la aplicación que creó las SharedPreferences especifica el permisos de acceso correspondientes. Por ejemplo, se especifica MODE_WORLD_READABLE, lo que indica que otras aplicaciones pueden leer las SharedPreferences. Se especifica MODE_WORLD_WRITEABLE, lo que indica que las SharedPreferences pueden ser escritas por otros programas.

Para poder leer el Contexto correspondiente a otros programas, puedes seguir los siguientes pasos:

1. Es necesario crear el Contexto correspondiente a otros programas, como el siguiente código. :

Context userCount = createPackageContext("com.sharedpreferencesdemo.zhanggeng", Context.CONTEXT_IGNORE_SECURITY);

En el programa anterior: com.sharedpreferencesdemo.zhanggeng es el nombre del paquete de otros programas - de hecho, el sistema Android utiliza aplicaciones. El registro del programa sirve como identificador del programa.

2. Llame al getSharedPreferences (nombre de cadena, modo int) del contexto de otros programas para obtener el objeto SharedPreferences correspondiente.

3. Llame al método edit() de SharedPreferences para obtener el editor correspondiente.

Como se muestra en la siguiente demostración:

[java] ¿ver Plaincopyprint?

private void readOtherAppSp() {

Contexto useCount = null;

try {

//Obtener el contexto correspondiente a otros programas

useCount = createPackageContext("com.sharedpreferencesdemo.zhanggeng", Context.CONTEXT_IGNORE_SECURITY)

p>

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace()

}

; //Utilice el contexto de otros programas para obtener las SharedPreferences correspondientes

SharedPreferences prefs = useCount.getSharedPreferences("count", Context.MODE_WORLD_READABLE

//Leer datos

);

int count = prefs. getInt("count", 0);

//Procesamiento de seguimiento...

}

Así que regresamos. a la pregunta original, cómo corregirlo ¿Cómo usar SharedPreferences?

1 Establezca los permisos correspondientes: si solo lo usa este programa o un programa con la misma identificación de usuario, use Context.MODE_PRIVATE. permiso; si permite que otros programas lean y establezcan permisos; si permite que otros programas lean, puede escribir y establecer los permisos correspondientes

2. también se puede utilizar para guardar la configuración del usuario y se recomienda oficialmente PreferenceActivtiy).

3. Si desea que el programa tenga múltiples archivos de preferencias, use getSharedPreferences(xxx, xxx). Si desea que el programa tenga solo un archivo de preferencias, use getPreferences().

4. Es mejor no utilizar SharedPreferences para guardar datos compartidos utilizados de forma interactiva por varios programas. Se recomienda utilizar ContentProvider, BroadcastReceiver y Service para completar el intercambio de datos entre varios programas.