Android共享首选项不保存

我创build了一个Androiddynamic壁纸,我试图让用户从手机中select一张图片并将其应用为背景图片,但是当我启动开始select图片的活动时,我的共享偏好似乎没有妥善保存。

下面是我在用户按下首选项button时启动的activity的onCreate方法,以及在设备上获取图像path的onActivityResult(所有这些似乎都起作用)。 我提交首选项后的println不会打印任何内容。

@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(); } 

从文档 :

为这些首选项创build一个新的编辑器,通过这个编辑器可以对首选项中的数据进行修改,并自动将这些更改提交回Shared Shared对象。

由于这是一个新的编辑器实例,你的代码应该更像这样:

 preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0); SharedPreferences.Editor editor = preferences.edit(); editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok"); editor.commit(); 

尝试另一种初始化SharedPreferencesvariables的方法:

 SharedPreferences sf = PreferenceManager.getDefaultSharedPreferences(this); 

你也可以用sf.edit().putString(string, value).commit();写连接到sf.edit().putString(string, value).commit();

在我的情况下,我不得不添加editor.apply(); 在承诺之前为了工作。

这是我的代码:

 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();