我在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_READABLE
或MODE_WORLD_WRITABLE
?
答案 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类添加到清单。
祝你好运!