user6798766 user6798766 - 2 months ago 9
Android Question

Maintaining user session in android using Shared prference

Edited:

I am developing an app in which I'm maintaining session using SharedPreference,So that when user will click on Logout Button then it will only go out off the app. But the problem is when user is switch off their phone and again switch it onn,for them it is again showing Login Screen. I don't know how to do that.Please help. Below is my code for mainActivity:

public class main extends AppCompatActivity {
public Button submit;


public static final String MyPREFERENCES = "MyPrefs" ;
public static final String email = "emailkey";
SharedPreferences sharedpreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);

submit = (Button) findViewById(R.id.btn_login);

ImageView i1 = (ImageView) findViewById(R.id.imgLogo);
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.pb);
String checkBoxText = "I agree to all the ";
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
checkBox.setText(Html.fromHtml(checkBoxText));
checkBox.setMovementMethod(LinkMovementMethod.getInstance());

submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText e1 = (EditText) findViewById(R.id.input_email);
final EditText p1 = (EditText) findViewById(R.id.input_password);
final String e = e1.getText().toString();
final String password = p1.getText().toString();

SharedPreferences.Editor editor = sharedpreferences.edit();

editor.putString(email, e);

editor.commit();


and code for second activity:

else if(position==3)
{
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("Are you sure you want to Logout?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {

SharedPreferences sharedpreferences = getSharedPreferences(main.MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.clear();
editor.commit();
Intent i = new Intent(getApplicationContext(), main.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
getApplicationContext().startActivity(i);


finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();

}


In Splash Screen Activity, I am cheking the condition,But whenever the phone switched off on it is now showing login screen not even the splash screen also.

public class Splash_Screen extends FragmentActivity{
private static int SPLASH_TIME_OUT = 1000;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.splash_screen);
SharedPreferences sharedpreferences = getSharedPreferences(main.MyPREFERENCES, Context.MODE_PRIVATE);

if (sharedpreferences.contains("email")) {
Intent i = new Intent(Splash_Screen.this, MainActivity.class);
startActivity(i);
}
else{
Intent i = new Intent(Splash_Screen.this,Splash_Screen.class);
startActivity(i);
//get yourkey value and load screen
}
new Handler().postDelayed(new Runnable() {

/*
* Showing splash screen with a timer. This will be useful when you
* want to show case your app logo / company
*/

@Override
public void run() {
// This method will be executed once the timer is over
// Start your app main activity
Intent i = new Intent(Splash_Screen.this, main.class);
startActivity(i);

// close this activity
finish();
}
}, SPLASH_TIME_OUT);
}
}

Answer

check shared pref exist or not , in your splash screen or in your launcher screen.

  if (sharedpreferences.contains("yourkey")) {
        //get yourkey value and load screen
           }

With the help of this perform action to show home screen or login page.

       public class Splash_Screen extends FragmentActivity{
      private static int SPLASH_TIME_OUT = 1000;

      @Override
       protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.splash_screen);
SharedPreferences sharedpreferences = getSharedPreferences(main.MyPREFERENCES, Context.MODE_PRIVATE);

   //change here
if (sharedpreferences.contains(main.email)) {
    Intent i = new Intent(Splash_Screen.this, MainActivity.class);
    startActivity(i);
}
else{

remove this code from else

  //  Intent i = new Intent(Splash_Screen.this,Splash_Screen.class);
  //  startActivity(i);
    //get yourkey value and load screen
}
new Handler().postDelayed(new Runnable() {

 /*
  * Showing splash screen with a timer. This will be useful when you
  * want to show case your app logo / company
  */

    @Override
    public void run() {
        // This method will be executed once the timer is over
        // Start your app main activity
        Intent i = new Intent(Splash_Screen.this, main.class);
        startActivity(i);