Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该如何存储用户凭据,以便用户不';你不必再次登录吗?_Java_Android_Android Activity_Android 5.0 Lollipop - Fatal编程技术网

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();
    }
}
My
AndroidManifest.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);