繁体   English   中英

Android共享的首选项未保存

[英]Android shared preferences not saving

我已经创建了一个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();
}

文档中

为这些首选项创建一个新的Editor,通过它您可以修改首选项中的数据,并将这些更改原子地提交回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 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();

好吧,基于@zrgiu的帖子,对我来说,我只添加了editor.clear(); 在使用编辑器之前...因此最终代码将类似于:

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

;)

请记住,您需要相同的活动来保存和检索数据。 您不能使用类似的方法

public String readValue(Activity activity, String key) {
    SharedPreferences sp = activity.getPreferences(Context.Mode_PRIVATE);
   //...
}

为了从同一活动中接收相同的数据,您需要使用与保存数据完全相同的活动来调用此方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM