Android共享首选项不保存

时间:2012-03-13 02:45:45

标签: android preferences wallpaper preference

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

5 个答案:

答案 0 :(得分:82)

来自documentation

  

为这些首选项创建一个新的编辑器,您可以通过它来创建   对首选项中数据的修改和原子提交   这些更改回到SharedPreferences对象。

由于这是一个新的Editor实例,您的代码应该更像这样:

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

答案 1 :(得分:16)

尝试另一种初始化SharedPreferences变量的方法:

SharedPreferences sf = PreferenceManager.getDefaultSharedPreferences(this);

您还可以使用sf.edit().putString(string, value).commit();

将书写链接到sf

答案 2 :(得分:0)

在我的情况下,我必须添加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();

答案 3 :(得分:0)

好吧,基于@zrgiu帖子,对我来说,只有在使用编辑器之前才添加preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0); SharedPreferences.Editor editor = preferences.edit(); editor.clear(); editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok"); editor.commit(); ...所以最终的代码将是这样的:

/* not active */
.nav-pills .pill-1 .nav-link:not(.active) {
    background-color: rgba(255, 0, 0, 0.5);
}

.nav-pills .pill-2 .nav-link:not(.active) {
    background-color: rgba(0, 250, 0, 0.5);
}

.nav-pills .pill-3 .nav-link:not(.active) {
    background-color: rgba(0, 0, 250, 0.5);
    color: white;
}


/* active (faded) */
.nav-pills .pill-1 .nav-link {
    background-color: rgba(255, 0, 0, 0.2);
    color: white;
}

.nav-pills .pill-2 .nav-link {
    background-color: rgba(0, 250, 0, 0.2);
}

.nav-pills .pill-3 .nav-link {
    background-color: rgba(0, 0, 250, 0.2);
    color: white;
}

;)

答案 4 :(得分:0)

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

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

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