我正在我的应用程序中使用共享偏好来管理会话。如果用户已登录,则必须显示主页活动,否则必须显示登录活动。
在http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/的帮助下
如果用户未登录,我尝试创建主页并重定向到登录活动。
这是对的吗?或者有没有更好的解决方案。
谢谢,班纳特。
我正在我的应用程序中使用共享偏好来管理会话。如果用户已登录,则必须显示主页活动,否则必须显示登录活动。
在http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/的帮助下
如果用户未登录,我尝试创建主页并重定向到登录活动。
这是对的吗?或者有没有更好的解决方案。
谢谢,班纳特。
这是我在登录用户时所做的事情:
private static final String APP_SHARED_PREFS = "asdasd_preferences";
SharedPreferences sharedPrefs;
Editor editor;
private boolean isUserLoggedIn;
sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
editor = sharedPrefs.edit();
editor.putBoolean("userLoggedInState", true);
editor.putInt("currentLoggedInUserId", userId);
editor.commit();
Intent signupSuccessHome = new Intent(this, Home.class);
signupSuccessHome.putExtra("reqFrom", "login");
startActivity(signupSuccessHome);
finish();
在我所有活动扩展的基本活动中(它包含操作栏和滑动菜单)我有以下检查:(主要活动是我的登录/注册屏幕。如果用户未登录,我将它们发送到那里)
@Override
protected void onResume() {
sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
if (!isUserLoggedIn) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
super.onResume();
}
@Override
protected void onRestart() {
sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
if (!isUserLoggedIn) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
super.onRestart();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
currentlyLoggedInUser = sharedPrefs.getInt("currentLoggedInUserId", 0);
currentlyLoggedInUserString = Integer.toString(currentlyLoggedInUser);
if (!isUserLoggedIn) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
并防止用户返回登录屏幕:在 Login.java 中:
isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
if (isUserLoggedIn) {
Intent intent = new Intent(this, Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
在 Home.java 中:
@Override
public void onBackPressed() {
Intent intent = new Intent(this, Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
super.onBackPressed();
}
就我的经验而言,我还使用登录页面/主页重定向的共享首选项。唯一的区别是,我的第一页是一个闪屏,我会显示一段时间。之后,我使用共享首选项检查登录状态,并进行必要的重定向。
不过这里应该注意一点,有些服务器要求您在一段时间后发送新的登录请求(作为登录响应的一部分从服务器发送的可配置值)已经过去。所以你可能想看看那个。在我的另一个应用程序中,每次启动应用程序时我都需要发送登录请求,因此我只需在第一次登录后将登录值(用户名/密码)存储在共享首选项中,然后静默执行登录部分(无需在初始屏幕之后显示登录屏幕)。所以这一切都取决于你的要求。但在我所有的应用程序中,我只使用了共享首选项。
也许其他人可以提出更好的方法。
你可以这样做 -
在您的条件检查活动(或启动活动)的 onResume() 中,您可以像这样检查(我只编写伪代码) -
onResume() {
if(userIsLoggedIn) {
val intent = Intent(this@CurrentActivity, HomeActivity::class.java)
startActivity(intent)
finish() // Do not forget to finish the current activity; This will help in not letting the user to come back this the CurrentActivity(condition checking activity)
}
else {
val intent = Intent(this@CurrentActivity, LogInActivity::class.java)
startActivity(intent)
finish()
}
}