我正在尝试保存到我的应用程序共享首选项,我保存了用户名和密码。
成功登录后,这些会被很好地存储。当我终止该应用程序,然后重新打开它时,它会自动登录,因为它应该使用共享首选项。
但是,当我导航到帐户管理 Activity 并尝试再次访问首选项时,找不到用户名和密码的 key ,并且返回默认值。我肯定使用正确的键值,因为如果首次启动时没有存储用户/密码首选项,则在需要手动登录时它可以完美地工作。
这真的让我很困惑,因为用户名和密码 key 显然存在,否则它不会自动登录。
一些代码:
这是我的帐户管理 Activity :
公共(public)类 AccManagement 扩展了 Activity {
TextView textName;
TextView textEmail;
String SharedUsername;
String SharedPassword;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_acc_management);
textName = (TextView)findViewById(R.id.textviewName);
textEmail = (TextView)findViewById(R.id.textviewEmail);
//these return null, as if there are no shared prefs stored.
SharedUsername= SharedPrefsWrapper.getFromPrefs(this, "USERNAME", null);
SharedPassword= SharedPrefsWrapper.getFromPrefs(this, "PASSWORD", null);
}
我为共享首选项创建了一个包装类,它获取键/值对并将其放入共享首选项中。
这是我检查用户是否存在于我的主要 Activity 中的方法:
public void Checker()
{
String SharedUsername= SharedPrefsWrapper.getFromPrefs(this, "USERNAME", null);
String SharedPassword= SharedPrefsWrapper.getFromPrefs(this, "PASSWORD", null);
if(SharedUsername== null || SharedPassword== null)
{
setContentView(R.layout.activity_main);
}
else
{
Login(url);
}
}
登录执行http请求,完成后调用此方法:
public void onTaskCompleted(String data)
{
if(data.contains("name")) //a successful login will return a json string with "name".
{
Intent intent = new Intent(this, MenuActivity.class);
SharedPrefsWrapper.saveToPref(this, "USERNAME", textusername);
SharedPrefsWrapper.saveToPref(this, "PASSWORD", textpassword);
startActivity(intent);
}
}
成功登录后,用户将看到一个包含帐户管理按钮的菜单,单击后将进入帐户管理,其中显示用户名和密码。虽然这就是我的问题发生的地方。它找不到我在登录时保存的共享首选项。仅当应用程序使用共享首选项自动登录时才会发生这种情况。如果这是第一次登录,它似乎工作正常,并且当我尝试从我的帐户 Activity 中获取共享首选项时,它们似乎仍然存在。
感谢您的帮助
如果这个问题根本没有意义,我很抱歉!
:)
编辑:
SharedPrefs 类方法:
public static void saveToPref(Context context, String key, String value)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getFromPrefs(Context context, String key, String defValue)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
try
{
return prefs.getString(key, defValue);
}
catch(Exception ex)
{
return defValue;
}
}
最佳答案
自动登录时,文本用户名和文本密码为空,因此这会清除您的首选项。
尝试尊重java naming conventions ,你的代码很难阅读。
关于java - 尽管我使用 SharedPrefs 自动登录,但它们似乎已被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23157100/