退出应用程序时不保存SharedPreferences

时间:2012-08-24 19:12:04

标签: android sharedpreferences android-2.3-gingerbread

我在Android的Gingerbread 2.3.3应用程序中有3个活动,我正在Eclipse中构建。

1)MainActivity ---两个选项,转到LoginActivity或直接转到HomeScreenActivity

2)LoginActivity ---输入登录凭据(又名用户名和密码),验证,然后存储在SharedPreferences中。成功验证后,它将转到HomescreenActivity。这是我对LoginActivity中的SharedPreferences部分所拥有的内容:

public static final String PREFS_FILE = "MY_PREFS";

SharedPreferences prefs = getSharedPreferences(PREFS_FILE, MODE_PRIVATE);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString("USERNAME", getUsername());
                editor.putString("PASSWORD", getPassword());
                editor.commit();

3)HomescreenActivity ---一个基本的主屏幕,显示当前在TextView右上角登录的用户。为此,我的onResume()包含:

public static final String PREFS_FILE = "MY_PREFS";

SharedPreferences prefs = getSharedPreferences(PREFS_FILE, MODE_PRIVATE);
TextView name_text = (TextView) findViewById(R.id.name_text_vw);
name_text.setText(prefs.getString("USERNAME", "");

当我使用LoginActivity并登录时,我在HomescreenActivity的TextView中正确地看到了用户名。但是,当我退出应用程序并执行其他操作以将活动从堆栈中移除时,我想返回应用程序,直接转到我的HomescreenActivity并看到我的用户名已经登录。但这不会发生。有谁知道为什么?我认为,即使在您离开应用程序之后,SharedPreferences也是存储设置和数据的方式。也许我没有使用正确的模式 - 又名MODE_WORLD_READABLEMODE_WORLD_WRITABLE

2 个答案:

答案 0 :(得分:4)

有活动的共享首选项和应用程序的共享首选项。也许您正在使用活动首选项。

保存到首选项:

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYLABEL",
      "myStringToSave").commit();  

获取存储的偏好:

PreferenceManager.getDefaultSharedPreferences(context).getString("MYLABEL",
     "defaultStringIfNothingFound"); 

上下文是你的上下文。

答案 1 :(得分:0)

我不得不说我不知道​​您具体问题的答案,我怀疑这是因为getSharedPreferences不是静态的,而是Context的一种方法。因此,您无法控制commit()何时实际写入存储。但是,我建议采用不同的方法。

我在自定义类中使用静态引用来扩展Application。

public class MyApp extends Application

{ 

    protected static SharedPreferences preferences;

    public static void loadPreferences(Context context) {

       // load your preferences

    }


    public static void savePreferences(Context context) {


      // save your preferences

    } 

您可以通过MyApp.preferences访问它们。

不要忘记将Application类添加到清单。

祝你好运!