How to maintain session in android?

101.2k views Asked by At

Can anybody tell me how to maintain session for a user login. For example when the user sign- in to an application they have to be signed in unless the user logouts or uninstall the application similar to gmail in android.

11

There are 11 answers

6
Bhanu Sharma On BEST ANSWER

Make one class for your SharedPreferences

public class Session {

    private SharedPreferences prefs;

    public Session(Context cntx) {
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    }

    public void setusename(String usename) {
        prefs.edit().putString("usename", usename).commit();
    }

    public String getusename() {
        String usename = prefs.getString("usename","");
        return usename;
    }
}

Now after making this class when you want to use it, use like this: make object of this class like

private Session session;//global variable 
session = new Session(cntx); //in oncreate 
//and now we set sharedpreference then use this like

session.setusename("USERNAME");

now whenever you want to get the username then same work is to be done for session object and call this

session.getusename();

Do same for password

0
Phantômaxx On

You can use a boolean value in the SharedPreferences.

Load it before login to check if login is needed.

Save it after login.

0
Ayoub On

You can obtain that behaivour in a few different ways, the one I prefer is setting a flag in the shared prefs. whe a user logs in an check it when the app is started if you get the default value the user is not loggend, else you should have your flag (i use the user name) set and avoid the log-in section.

2
Sanket Shah On

I have one simple way rather than maintain a session.

i.e. Just store one boolean variable with your username and password. by default set value equal to false.

After first successful login make its value to true.

Then just check its value on your Mainactivity, if it is true then jump to next activity otherwise jump to login activity.

2
Yogamurthy On

save the user data in shared preferences till the user logs out. once user logs out clear the data from shared preferences.

1
nikvs On

You can achieve this by using AccountManager.

Code Sample

// method to add account..
private void addAccount(String username, String password) {
    AccountManager accnt_manager = AccountManager
            .get(getApplicationContext());

    Account[] accounts = accnt_manager
            .getAccountsByType(getString(R.string.account_type)); // account name identifier.

    if (accounts.length > 0) {
        return;
    }

    final Account account = new Account(username,
            getString(R.string.account_type));

    accnt_manager.addAccountExplicitly(account, password, null);

    final Intent intent = new Intent();
    intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, username);
    intent.putExtra(AccountManager.KEY_PASSWORD, password);
    intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE,
            getString(R.string.account_type));
    // intent.putExtra(AccountManager.KEY_AUTH_TOKEN_LABEL,
    // PARAM_AUTHTOKEN_TYPE);
    intent.putExtra(AccountManager.KEY_AUTHTOKEN, "token");
    this.setAccountAuthenticatorResult(intent.getExtras());
    this.setResult(RESULT_OK, intent);
    this.finish();
}

// method to retrieve account.
private boolean validateAccount() {
    AccountManagerCallback<Bundle> callback = new AccountManagerCallback<Bundle>() {

        @Override
        public void run(AccountManagerFuture<Bundle> arg0) {
            Log.e("calback", "msg");

            try {
                Bundle b = arg0.getResult();
                if (b.getBoolean(AccountManager.KEY_ACCOUNT_MANAGER_RESPONSE)) {
                    //User account exists!!..
                }    
            } catch (OperationCanceledException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (AuthenticatorException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };

    AccountManager accnt_manager = AccountManager
            .get(getApplicationContext());

    Account[] accounts = accnt_manager
            .getAccountsByType(getString(R.string.account_type));

    if (accounts.length <= 0) {
        return false;
    } else {
        loginNameVal = accounts[0].name;
        loginPswdVal = accnt_manager.getPassword(accounts[0]);
        return true;
    }
}
0
Shahina On

Use SharedPreferences. Code to save a value to sharedpreferences:

SharedPreferences sp=getSharedPreferences("key", Context.MODE_PRIVATE);
SharedPreferences.Editor ed=sp.edit();
ed.putInt("value", your_value);
ed.commit();

Code to get value from sharedpreferences:

SharedPreferences sp=getSharedPreferences("key", Context.MODE_PRIVATE);
int value = sp.getInt("value", default_value);

You can check login and logout by using this value.

0
Apu Pradhan On

Through this format, you can set or get multiple objects of data, you don't need to create separate functions to store different models in SharedPreferences.

* Here in this format, you don't need to pass your object KEY for putString() and getString()
* Using the object class name you are able to identify your session object uniquely, for both setModel() and getModel()
public class Session {

private final SharedPreferences pref;

public Session(Context ctx) {
    pref = PreferenceManager.getDefaultSharedPreferences(ctx);
    //pref = ctx.getSharedPreferences("IDENTIFIED_NAME", Context.MODE_PRIVATE);
}

public <U> void setModel(U obj) {
    pref.edit().putString(getClassName(obj), SerializeObject(obj)).apply();
}

/* Parameter Example: Class.class */
public <U> U getModel(Class<U> type) {
    String user = pref.getString(type.getSimpleName(), null);
    if (isEmptyOrNull(user)) {
        return null;
    }
    return DeserializeObject(user, type);
}





/* The below functions are for support, You can move the below part to your own BaseUtil class. */
public static boolean isEmptyOrNull(String data) {
    if (data == null) {
        return true;
    }

    if (data.isEmpty() || data.trim().isEmpty()) {
        return true;
    }

    return false;
}

public static String getClassName(Object obj) {
    return obj.getClass().getSimpleName();
}

public static String SerializeObject(Object myObject) {
    // serialize the object
    try {
        Gson gson = new Gson();
        String json = gson.toJson(myObject);
        return json;
    } catch (Exception e) {
        System.out.println(e);
        return null;
    }
}

public static <U> U DeserializeObject(String serializedObject, Class<U> type) {
    // serialize the object
    try {
        if (serializedObject == null || serializedObject.isEmpty()) {
            return null;
        }
        GsonBuilder gsonBuilder = new GsonBuilder();
        Gson gson = gsonBuilder.create();
        U data = gson.fromJson(serializedObject, type);
        return data;
    } catch (Exception e) {
        System.out.println(e);
        return null;
    }
}
}

Create an object class (file_name: UserModel.java)

public class UserModel {
    public String userId;
    public String firstName;
    public String lastName;
    public String email;
    public String phone;
}

How to use - For setModel() and getModel()

//creating an instance of the Session class
Session session = new Session(ctx); // Here you have to pass the Context(ctx)

// setting value in the UserModel
UserModel obj = new UserModel();
obj.firstName = "Apu";
obj.lastName = "Pradhan";
obj.email = "[email protected]";
obj.phone = "123456789";

// set UserModel in the Session
session.setModel(obj);

//getting UserModel data from the Session
UserModel userData = session.getModel(UserModel.class);
0
Trinadh Koya On
public class Session {

    private SharedPreferences prefs;

    public Session(Context cntx) {
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
        editor = prefs.edit();
    }

    public void setusename(String usename) {
        editor.putString("usename", usename).commit();

    }

    public String getusename() {
        String usename = prefs.getString("usename","");
        return usename;
    }
}
0
Keshav Gera On

Source Code

https://drive.google.com/open?id=0BzBKpZ4nzNzUcUZxeHo0UnJ5UHc

Fetch Previous Login ID in android enter image description here

**After Login save Email ID is SharedPreferences** 

    emaidId = et_Email.getText().toString().trim();

    SharedPreferences ss = getSharedPreferences("loginSession_key", 0);
    Set<String> hs = ss.getStringSet("set", new HashSet<String>());
    hs.add(emaidId);
    SharedPreferences.Editor edit = ss.edit();
    edit.clear();
    edit.putStringSet("set", hs);
    edit.commit();

===================onCreate()====================
===================AutoCompleteTextView set Adapter===================

**Fetch PRevious Login Email id in email EditText**

SharedPreferences sss = getSharedPreferences("loginSession_key", 0);            // todo loginSession_key   key name ALWAYS SAME
Log.i("chauster", "2.set = " + sss.getStringSet("set", new HashSet<String>()));
Log.e("Session", "Value->" + sss.getStringSet("set", new HashSet<String()));
ArrayList<String> al = new ArrayList<>();
al.addAll(sss.getStringSet("set", new HashSet<String>()));
//Creating the instance of ArrayAdapter containing list of language names
ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this, android.R.layout.select_dialog_item, al);
//Getting the instance of AutoCompleteTextView
et_Email.setThreshold(1);//will start working from first character
et_Email.setAdapter(adapter);//setting the adapter data into the 
0
Nain Abbas On

Using this class will help you to store all types of sessions

public class Session {

    private SharedPreferences prefs;

    public Session(Context cntx) {
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    }

    public void set(String key,String value) {
        prefs.edit().putString(key, value).commit();
    }

    public String get(String key) {
        String value = prefs.getString(key,"");
        return value;
    }
}