2

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

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. 但是,当我退出应用程序并执行一些其他操作以使活动脱离堆栈时,我想返回应用程序,直接转到我的HomescreenActivity并查看我的用户名已经登录。但这不会发生。有谁知道为什么?我认为即使在您离开应用程序之后,SharedPreferences 也是存储设置和数据的方式。也许我没有使用正确的模式——又名MODE_WORLD_READABLEMODE_WORLD_WRITABLE

4

2 回答 2

4

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

要保存到首选项:

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

要获取存储的首选项:

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

上下文是您的上下文。

于 2012-08-24T19:48:56.677 回答
0

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

我在扩展应用程序的自定义类中使用静态引用。

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 访问它们。

不要忘记将您的应用程序类添加到清单中。

祝你好运!

于 2012-08-24T19:37:49.883 回答