如何解决Android SharedPreference 值在应用程序关闭时被清除
我将我的 UserId
保存在 SharedPreference
上以备将来使用。但是,如果我关闭该应用程序或终止该应用程序,这些数据就会被清除。
用于保存的代码:
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = app_preferences.edit();
editor.clear();
editor.putString("USERID",valu1);
editor.apply();
要检索的代码:
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
userID = app_preferences.getString("USERID","");
有什么建议吗?
解决方法
apply() 方法是异步的并且在后台线程上工作。它将数据缓存在 RAM 中并等待,直到它有足够的资源将数据写入永久存储。考虑到这一点,如果您立即关闭您的应用程序,您可能会丢失数据。与 apply() 不同,commit 在 UI 线程上同步运行,它是否有保证的写入但会暂停 UI 线程片刻。等待是微不足道的。考虑使用 commit() 而不是 apply() 看看它是否有帮助。
,为此创建一个会话管理器,这是一个单独的类。
public class SessionManager {
SharedPreferences pref;
Editor editor;
Context _context;
int PRIVATE_MODE = 0;
private static final String PREF_NAME = "Android_Session";
private static final String IS_LOGIN = "IsLoggedIn";
// User name,Email,Id (make variable public to access from outside)
public static final String KEY_PHONE = "phone";
public static final String KEY_EMAIL = "email";
public static final String KEY_ID = "id";
// Constructor
public SessionManager(Context context) {
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME,PRIVATE_MODE);
editor = pref.edit();
}
/**
* Create login session when user login first time call this.
*/
public void createLoginSession(String phone,String email,String id) {
editor.putBoolean(IS_LOGIN,true);
editor.putString(KEY_PHONE,phone);
editor.putString(KEY_EMAIL,email);
editor.putString(KEY_ID,id);
editor.commit();
}
/**
* Check user is login or not if not.
* This will used in dynamic app where session expired from server sideit will redirect to login page.
*/
public void checkLogin() {
if (!this.isLoggedIn()) {
// user is not logged in then redirect to Login Activity
Intent i = new Intent(_context,Login.class);
// Add flags launch modes
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
_context.startActivity(i);
}
}
/**
* Get stored session data
*/
public HashMap<String,String> getUserDetails() {
HashMap<String,String> user = new HashMap<String,String>();
user.put(KEY_PHONE,pref.getString(KEY_PHONE,null));
user.put(KEY_EMAIL,pref.getString(KEY_EMAIL,null));
user.put(KEY_ID,pref.getString(KEY_ID,null));
return user;
}
/**
* Clear session details
*/
public void logoutUser() {
editor.clear();
editor.commit();
// After logout redirect user to Login Activity
Intent i = new Intent(_context,Login.class);
// Add Flags (Launch Modes)
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
_context.startActivity(i);
}
/**
* Check if user login or not
**/
public boolean isLoggedIn() {
return pref.getBoolean(IS_LOGIN,false);
}
}
现在检索像
这样的值 SessionManager session = new SessionManager(getApplicationContext());
HashMap<String,String> user = session.getUserDetails();
String id = user.get(SessionManager.KEY_ID);
识别登录
SessionManager session = new SessionManager(getApplicationContext());
if (!session.isLoggedIn()) {
//ToDo
} else {
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。