阻止用户在登录Android应用程序后返回登录页面

阻止用户在登录Android应用程序后返回登录页面,android,authentication,login,Android,Authentication,Login,我正在制作一个具有登录表单的应用程序,所以我需要的是让用户只输入一次用户名和密码,这意味着在输入所有详细信息后,无需再次输入详细信息,否则他将注销。我已经到了可以在共享首选项中保存数据的地步,但我想要的是,我的应用程序在重新启动时运行登录创建主活动并检查用户是否登录。如果他没有登录,请将您的用户重定向到登录页面并完成其他活动,否则用户可以点击返回按钮返回您的主要活动 如果这样做,用户登录时不必加载2个屏幕,从而缩短启动时间。创建主活动并检查用户是否登录。如果他没有登录,请将您的用户重定向到登录页

我正在制作一个具有登录表单的应用程序,所以我需要的是让用户只输入一次用户名和密码,这意味着在输入所有详细信息后,无需再次输入详细信息,否则他将注销。我已经到了可以在共享首选项中保存数据的地步,但我想要的是,我的应用程序在重新启动时运行登录创建主活动并检查用户是否登录。如果他没有登录,请将您的用户重定向到登录页面并完成其他活动,否则用户可以点击返回按钮返回您的主要活动


如果这样做,用户登录时不必加载2个屏幕,从而缩短启动时间。

创建主活动并检查用户是否登录。如果他没有登录,请将您的用户重定向到登录页面并完成其他活动,否则用户可以点击返回按钮返回您的主要活动


如果这样做,用户登录时不必加载两个屏幕,从而缩短启动时间。

用户成功登录后,将其信息存储在首选项中

例如,要存储用户名,请执行以下操作:

private SharedPreferences mPreferences;

mPreferences = getSharedPreferences("User", MODE_PRIVATE);
SharedPreferences.Editor editor = mPreferences.edit();
editor.putString("username", your_user_name);
editor.commit();
每次用户访问登录活动时,您都可以检查用户名是否已存储在首选项中:

if (mPreferences.contains("username")) {
    // start Main activity
} else {
    // ask him to enter his credentials
}
SharedPreferences.Editor editor = mPreferences.edit();
editor.clear();   // This will delete all your preferences, check how to delete just one
editor.commit();
当用户注销时,不要忘记从您的首选项中删除用户名密钥:

if (mPreferences.contains("username")) {
    // start Main activity
} else {
    // ask him to enter his credentials
}
SharedPreferences.Editor editor = mPreferences.edit();
editor.clear();   // This will delete all your preferences, check how to delete just one
editor.commit();
在AndroidManifest.xml中,您可以添加此行,这样用户就无法返回登录页面:

<activity
    android:name="your login activity"
    android:noHistory="true" >
</activity>

用户成功登录后,将其信息存储在首选项中

例如,要存储用户名,请执行以下操作:

private SharedPreferences mPreferences;

mPreferences = getSharedPreferences("User", MODE_PRIVATE);
SharedPreferences.Editor editor = mPreferences.edit();
editor.putString("username", your_user_name);
editor.commit();
每次用户访问登录活动时,您都可以检查用户名是否已存储在首选项中:

if (mPreferences.contains("username")) {
    // start Main activity
} else {
    // ask him to enter his credentials
}
SharedPreferences.Editor editor = mPreferences.edit();
editor.clear();   // This will delete all your preferences, check how to delete just one
editor.commit();
当用户注销时,不要忘记从您的首选项中删除用户名密钥:

if (mPreferences.contains("username")) {
    // start Main activity
} else {
    // ask him to enter his credentials
}
SharedPreferences.Editor editor = mPreferences.edit();
editor.clear();   // This will delete all your preferences, check how to delete just one
editor.commit();
在AndroidManifest.xml中,您可以添加此行,这样用户就无法返回登录页面:

<activity
    android:name="your login activity"
    android:noHistory="true" >
</activity>

你能帮我举个例子吗?我现在很困惑。你能帮我举个例子吗?我现在很困惑。另一种方法可以做到这一点,但只有当你想在用户每次启动应用程序时强制用户登录时,你才可以创建应用程序单例并在那里存储凭据。但在我看来,使用共享参考的方法更好opinion@jbihan一切都很好!但它只保存用户名和密码一次,而不是永久保存。有什么方法可以永久保存它们吗?存储在SharedReferences中的信息将永久存储,除非您卸载应用程序或在代码中删除它们。但在我的情况下,当我第三次重新启动应用程序时,它需要用户名和密码。您确定不在某个位置删除密钥吗?信息应该在那里。您是否在使用SharedReferences的每个地方都尝试过调试它?另一种方法是在每次用户启动应用程序时强制用户登录时,创建应用程序单例并在其中存储凭据。但在我看来,使用共享参考的方法更好opinion@jbihan一切都很好!但它只保存用户名和密码一次,而不是永久保存。有什么方法可以永久保存它们吗?存储在SharedReferences中的信息将永久存储,除非您卸载应用程序或在代码中删除它们。但在我的情况下,当我第三次重新启动应用程序时,它需要用户名和密码。您确定不在某个位置删除密钥吗?信息应该在那里。您是否尝试在使用SharedReferences的每个地方调试它?