手机旋转时,SharedPreference值已更改

时间:2012-11-07 03:02:57

标签: android sharedpreferences

在我的应用程序中,当手机处于纵向模式时,可以检索文件名。

当我旋转手机时,正在使用相同的文件来获取首选项,但此特定首选项将显示为空白。

我检查了我写入此首选项的一个函数,但是在旋转手机时没有调用它。

那么,通过旋转手机可能导致sharedpreferences发生变化的原因是什么?

以下是我使用的代码:

static String retrieveStoredFilename(Context context) {
    SharedPreferences myPrefs = context.getSharedPreferences(PREF_NAME,
            Context.MODE_PRIVATE);
    String s = myPrefs.getString(FILENAME, "");

    return TextUtils.isEmpty(s) ? (String) null : s;
}

如果它有帮助,可以使用以下代码。这是来自旋转实际搞砸的片段。 on onResume filename在旋转后设置为null,但从那时起它就为null,即使我向后旋转也是如此。

@Override
public void onPause() {
    super.onPause();
    mIV.getBitmap().recycle();
    mIV.setImageResource(R.drawable.ic_action_search);
    if (myBitMap != null)
        myBitMap.recycle();
}

@Override
public void onResume() {
    super.onResume();
    filename = ControllerFragment.retrieveStoredFilename(getActivity());
    getBitmap(filename);
    mIV.invalidate();
    }

这两个常数是:

public static String FILENAME = "filename";
public static String PREF_NAME = "photobrowser";

2 个答案:

答案 0 :(得分:1)

我看到的唯一可能性是FILENAME的值没有被保留。可能值得查看lifecycle of an ActivitySaving Activity state on Android

以下是关于Configuration Changes的Android文档的一篇文章。

  

除非您另行指定,否则配置更改(例如更改   在屏幕方向,语言,输入设备等)将导致您的   当前活动将被销毁,正常活动   onPause()onStop()onDestroy()的生命周期过程   适当。如果活动位于前景或可见   用户,在该实例中调用onDestroy()后再新建一个   无论如何都会创建活动的实例   之前实例生成的savedInstanceState   onSaveInstanceState(Bundle)

因此,在更改方向后,您的onResume()永远不会被调用。活动将贯穿整个生命周期onDestroy()。调整方向更改onCreate()后,因为它是您活动的新实例。

答案 1 :(得分:1)

检查应用程序的生命周期。你对onCreate(),onPause()等做了什么?也许您正在清除该偏好条目。正如this says

  

除非您另行指定,否则配置更改(例如更改   在屏幕方向,语言,输入设备等)将导致您的   当前活动将被销毁,正常活动   onPause(),onStop()和onDestroy()的生命周期过程为   适当。如果活动位于前景或可见   用户,一旦onDestroy()在该实例中被调用,然后是新的   无论如何都会创建活动的实例   之前实例生成的savedInstanceState   的onSaveInstanceState(束)。