SharedPrefs 似乎已被擦除,即使我使用它们来自动登录
Posted
技术标签:
【中文标题】SharedPrefs 似乎已被擦除,即使我使用它们来自动登录【英文标题】:SharedPefs seeminly wiped even though I use them to auto login 【发布时间】:2014-04-18 15:21:12 【问题描述】:我正在尝试将共享首选项保存到我的应用程序中,我保存了用户名和密码。
成功登录后,这些会被很好地存储。当我杀死应用程序,然后重新打开它时,它会使用共享首选项自动登录。
但是,当我导航到帐户管理活动并尝试再次访问首选项时,找不到用户名和密码的密钥并返回默认值。我肯定会使用正确的键值,因为如果在第一次启动时没有存储用户/密码首选项,则需要手动登录时它工作得非常好。
这真的让我很困惑,因为用户名和密码密钥显然存在,否则它不会自动登录。
一些代码:
这是我的帐户管理活动:
公共类 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);
我为共享首选项创建了一个包装类,它获取键/值对并将其放入共享首选项中。
这是我检查用户是否存在于我的主要活动中的方式:
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);
成功登录后,用户将进入一个包含帐户管理按钮的菜单,单击后将进入帐户管理,其中显示用户名和密码。虽然这是我的问题发生的地方。它找不到我在登录时保存的共享首选项。仅当应用程序使用共享首选项自动登录时才会发生这种情况。如果这是第一次登录,它似乎工作正常,并且当我尝试从我的帐户活动中获取它们时,共享首选项似乎仍然存在。
感谢您的帮助
很抱歉,如果这个问题根本没有意义!
:)
编辑:
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;
【问题讨论】:
您是否将您的编辑提交到某处的 SharedPrefs?像 editor.commit(); 这样的东西? 你能展示你的SharedPrefsWrapper
类吗?这很可能是问题所在。
我已经对原帖进行了编辑:)
【参考方案1】:
自动登录时,textusername 和 textpassword 为空,所以这会清除您的偏好设置。
尽量尊重java naming conventions,你的代码很难阅读。
【讨论】:
以上是关于SharedPrefs 似乎已被擦除,即使我使用它们来自动登录的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试复制它并将副本推送到同一向量中时,向量中的对象有时会被擦除