我创建了一个Android动态壁纸,我试图让用户从手机中选择图片并将其应用为背景图片,但是当我启动旨在选择图片的活动时,我分享了偏好设置似乎无法正确保存。
以下是我在用户按下首选项按钮时启动的活动的onCreate方法,以及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();
}
为这些首选项创建一个新的编辑器,通过它您可以进行对首选项中的数据进行修改并自动提交这些更改将返回到SharedPreferences对象。
因为这是一个新的Editor实例,所以您的代码应更像这样:
preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok");
editor.apply();
尝试另一种初始化SharedPreferences变量的方法:
SharedPreferences sf = PreferenceManager.getDefaultSharedPreferences(this);
您也可以使用sf.edit().putString(string, value).commit();
链式写入sf>
就我而言,我必须添加editor.apply();在提交之前才能工作。
嗯,根据@zrgiu的帖子,对我来说,我只在使用编辑器之前添加了editor.clear();
,所以最终的代码如下:
请记住,您需要相同的活动来保存和检索数据。您不能使用类似