J'ai créé un Android fond d'écran en direct et j'essaie de laisser un utilisateur choisir une image sur son téléphone et l'appliquer comme image d'arrière-plan, mais quand je lance l'activité qui démarre l'intention pour choisir les images, mes préférences partagées ne semblent pas enregistrer correctement.
Ci-dessous est ma méthode onCreate de l'activité que je démarre lorsque les utilisateurs appuient sur le bouton de préférence, et le onActivityResult qui obtient le chemin de l'image sur l'appareil (tout ce qui semble fonctionner). Le println après avoir validé les préférences n'imprime rien.
@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 :
Créez un nouvel éditeur pour ces préférences, grâce auquel vous pouvez apporter des modifications aux données dans les préférences et valider atomiquement ces modifications dans l'objet SharedPreferences.
Comme il s'agit d'une nouvelle instance de l'éditeur, votre code devrait ressembler davantage à ceci:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.apply();
Essayez une autre façon d'initialiser votre variable SharedPreferences:
SharedPreferences sf = PreferenceManager.getDefaultSharedPreferences(this);
Vous pouvez également chaîner l'écriture vers sf avec sf.edit().putString(string, value).commit();
Gardez à l'esprit que vous avez besoin de la même activité pour enregistrer et récupérer des données. Vous ne pouvez pas utiliser une méthode comme
public String readValue(Activity activity, String key) {
SharedPreferences sp = activity.getPreferences(Context.Mode_PRIVATE);
//...
}
Pour recevoir les mêmes données de la même activité, vous devez appeler cette méthode avec la même activité que celle que vous aviez enregistrée.
eh bien, basé sur @zrgiu post, pour moi, je n'ai travaillé qu'en ajoutant editor.clear();
avant d'utiliser l'éditeur ... donc le code final sera quelque chose comme:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.commit();
;)
Dans mon cas, j'ai dû ajouter editor.apply (); avant de s'engager pour travailler.
Voici mon code:
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();