Java 我应该如何存储用户凭据,以便用户不';你不必再次登录吗?
我有两个活动:Java 我应该如何存储用户凭据,以便用户不';你不必再次登录吗?,java,android,android-activity,android-5.0-lollipop,Java,Android,Android Activity,Android 5.0 Lollipop,我有两个活动:Login和Main 我还有App类,在活动之前运行 public class App extends Application { @Override public void onCreate() { super.onCreate(); } } MyAndroidManifest.xml使Login活动成为第一个运行的活动 我是否应该转到登录活动,检查并确定用户是否已登录 或者我应该创建一个执行此检查的空白活动,然后启动正确的活动,
Login
和Main
我还有App
类,在活动之前运行
public class App extends Application
{
@Override
public void onCreate()
{
super.onCreate();
}
}
MyAndroidManifest.xml
使Login
活动成为第一个运行的活动
我是否应该转到登录
活动,检查并确定用户是否已登录
或者我应该创建一个执行此检查的空白活动,然后启动正确的活动,或者是Login
或者Main
或者检查应该在App
类中完成,并对Android清单进行更改
因此,这不会成为一场意见盛会,任何建议背后都必须有一个逻辑原因,以及为什么它是最好的。在
SharedReferences
中检查登录需要一点时间,如果你通过空白活动执行此检查,你的应用程序的启动时间将毫无理由地增加(启动2项活动而不是1项活动的时间)
您可以签入您的
MainActivity
,如果失败,则运行LoginActivity
您如何处理注册?整个登录/注册/身份验证流程虽然在纸面上看起来很简单,但考虑到多个同时登录、密码更改、忘记等情况,可能会变得非常复杂,有很多边缘情况密码、帐户删除等。也就是说,Android提供了专门为此目的而设计的,并且是关于如何使用它的更好教程之一。您可以在加载应用程序时查看启动屏幕,并在此期间检查用户名和密码。
或者,您可以将带有充电指示灯的主屏幕上传给用户,让用户知道发生了什么事情,并且应用程序没有卡住。第一种方法:
我建议你带碎片去
启动MainActivity
,在onCreate()内检查用户的登录会话是否有效,如果有效,请执行正常的工作流,否则启动LoginFragment
第二种方法:
执行splash活动
,检查登录用户会话的有效性并确定工作流
第三种方法
假设用户已登录,并在onCreate()
内启动main活动
检查用户会话有效性,如果无效,则启动LoginActivity
和finish()
您的main活动
毫无疑问,第一个可能是您的最佳选择,但我应该把这个决定留给您。:保存凭证由您决定。Ofc最好将其保存在安全的地方并进行编码;)
有许多可能的解决方案:
1) 溅屏
理论上我们不应该使用闪屏:P
但在这种情况下,这将非常容易;)
2) 主要活动
启动主活动,在用数据、ws调用等填充屏幕之前,在onCreate之后,检查凭据;)如果是
确定->开始解析数据/填充内容
else->完成主要活动,显示toast,打开登录活动
3) 碎片
活动主->检查凭证->放置登录片段或主片段好的解决方案是创建用于保存会话信息的新类,例如:
public class SessionManager {
// Shared Preferences
SharedPreferences pref;
// Editor
Editor editor;
// Context
Context mContext;
// Shared pref mode
int PRIVATE_MODE = 0;
// Sharedpref file name
private static final String PREF_NAME = "MyPref";
// All Shared Preferences Keys
private static final String IS_LOGIN = "IsLoggedIn";
private static final String KEY_EMAIL = "email";
private static final String KEY_ID = "id";
// Constructor
public SessionManager(Context context) {
this.mContext = context;
pref = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
/**
* Create login session
*/
public void createLoginSession(String email, int id) {
// Storing login value as TRUE
editor.putBoolean(IS_LOGIN, true);
// Storing email in pref
editor.putString(KEY_EMAIL, email);
// Storing id in pref
editor.putInt(KEY_ID, id);
// commit changes
editor.commit();
}
/**
* Check login method wil check user login status
* If false it will redirect user to login page
* Else won't do anything
*/
public void checkLogin() {
// Check login status
if (!this.isLoggedIn()) {
// user is not logged in redirect him to Login Activity
Intent i = new Intent(mContext, LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Staring Login Activity
mContext.startActivity(i);
}
}
/**
* Quick check for login
* *
*/
// Get Login State
public boolean isLoggedIn() {
return pref.getBoolean(IS_LOGIN, false);
}
public int getId() {
return pref.getInt(KEY_ID, 0);
}
}
在MainActivity中,您必须检查用户是否登录:
public class MainActivity extends Activity {
// Session Manager Class
SessionManager session;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Session class instance
session = new SessionManager(getApplicationContext());
session.checkLogin();
.
// code goes here
...
如果用户未登录,他将被重定向到LoginActivity
在LoginActivity中,只需检查电子邮件/通行证或其他信息,。。。电话:
session.createLoginSession(mEmail, mId);
并将用户重定向回MainActivity
session.createLoginSession(mEmail, mId);