usar - Preferencias compartidas de Android que no guardan
sharedpreferences android studio ejemplo (4)
Creé un fondo de pantalla de Android en vivo e intento que un usuario elija una imagen de su teléfono y la aplique como imagen de fondo, pero cuando inicio la actividad que inicia la intención de elegir las imágenes, mis preferencias compartidas no Parece que se guarda correctamente.
Debajo está mi método onCreate de la actividad que comienzo cuando los usuarios presiona el botón de preferencia, y onActivityResult que obtiene la ruta de la imagen en el dispositivo (todo lo que parece funcionar). La impresión después de confirmar las preferencias no imprime nada.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PICTURE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
preferences.edit().putString(SETTINGS_BACKGROUND_IMAGE, "okok");
preferences.edit().commit();
System.out.println("Image" + preferences.getString(SETTINGS_BACKGROUND_IMAGE, ""));
}
}
finish();
}
De la documentation :
Cree un nuevo Editor para estas preferencias, a través del cual puede hacer modificaciones a los datos en las preferencias y volver a cometer esos cambios atómicamente al objeto SharedPreferences.
Como esa es una nueva instancia de Editor, su código debería ser más como esto:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.commit();
En mi caso, tuve que agregar editor.apply (); antes de comprometerse para trabajar.
Este es mi código:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.apply();//I added this line and started to work...
editor.commit();
Pruebe con otra forma de inicializar su variable SharedPreferences:
SharedPreferences sf = PreferenceManager.getDefaultSharedPreferences(this);
También puede escribir en cadena a sf con sf.edit().putString(string, value).commit();
bueno, basado en @zrgiu post, para mí solo funcionó agregar editor.clear();
antes de usar el Editor ... para que el código final sea algo así como:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.commit();
;)