注销后,shredpreference会话android无法直接进入登录页面

时间:2018-08-03 03:48:27

标签: android session sharedpreferences

嗨,我的android登录会话功能有问题,这是当我从最近的应用程序菜单中看不到该应用程序时,我的应用程序在点击注销后没有定向到登录页面。如果这些应用程序仍在最近的应用程序上,那么当我们打开它时,即使处于注销状态,它也将直接进入主要活动。但是在我们清除应用程序然后再次将其打开后,它运行良好。如何解决?

这是我的sessionManager类

public class LoginSession {

// Shared Preferences
SharedPreferences pref;

// Editor for Shared preferences
SharedPreferences.Editor editor;

// Context
Context _context;

// Shared pref mode
int PRIVATE_MODE = 0;

// Sharedpreference file name
private static final String PREF_NAME = "akun";

// All Shared Preferences Keys
private static final String IS_LOGIN = "IsLoggedIn";


// User name (make variable public to access from outside)
public static final String KEY_NAME = "username";
public static final String KEY_ID = "technician_id";

// Constructor
public LoginSession(Context context){
    this._context = context;
    pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
    editor = pref.edit();
}


/**
 * Create login session
 * */
public void createLoginSession(String name, String technician_id){
    // Storing login value as TRUE
    editor.putBoolean(IS_LOGIN, true);

    // Storing name in pref
    editor.putString(KEY_NAME, name);
    editor.putString(KEY_ID, technician_id);

    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.isLoggedOff()){
        // user is not logged in redirect him to Login Activity
        Intent i = new Intent(_context, MainActivity.class);
        // Closing all the Activities
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        // Add new Flag to start new Activity
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        // Staring Login Activity
        _context.startActivity(i);

    }

}



/**
 * Get stored session data
 * */
public HashMap<String, String> getUser(){
    HashMap<String, String> user = new HashMap<String, String>();
    // user name
    user.put(KEY_NAME, pref.getString(KEY_NAME, null));
    user.put(KEY_ID, pref.getString(KEY_ID, null));
    // return user
    return user;
}
/**
 * Clear session details
 * */
public void logoutUser(){
    // Clearing all data from Shared Preferences
    editor.clear();
    editor.commit();

    // After logout redirect user to Login Activity
    Intent i = new Intent(_context, LoginActivity.class);
    // Closing all the Activities
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    // Add new Flag to start new Activity
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    // Staring Login Activity
    _context.startActivity(i);
    OneSignal.setSubscription(false);
}

/**
 * Quick check for login
 * **/
// Get Login State
public boolean isLoggedOff(){
    return pref.getBoolean(IS_LOGIN, false);
}
}

注意:我只是调用注销用户进行注销,并在loginActivity中调用checkLogin()函数

2 个答案:

答案 0 :(得分:1)

我通过注销后添加finish()来解决此问题。

答案 1 :(得分:0)

只需替换

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

使用

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);