使用共享prference在android中维护用户会话

时间:2016-09-22 05:58:54

标签: android session

被修改

我正在开发一个应用程序,我在其中使用SharedPreference维护会话,因此当用户点击Logout Button时,它只会离开应用程序。但问题是当用户关闭手机并再次打开手机时,对于他们来说再次显示登录屏幕。我不知道该怎么做。请帮忙。下面是我的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();

和第二项活动的代码:

       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();

        }

在Splash Screen Activity中,我正在检查这个条件,但是当手机关闭时,它现在显示登录屏幕,甚至连闪屏都没有。

        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);
}
}

3 个答案:

答案 0 :(得分:0)

在启动画面或启动器屏幕中检查共享pref是否存在。

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

借助此执行操作显示主屏幕或登录页面。

       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{
  

从其他地方删除此代码

  //  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);

答案 1 :(得分:0)

登录oncreate()

        SharedPreferences prefs;
          String settingsTAG = "AppNameSettings";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity1);
            prefs = getSharedPreferences(settingsTAG, 0);
            if(checkLoginStatus()){
                callIntent();
            }
            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);

            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 = prefs.edit();

                    editor.putBoolean("rb0", true);

                    editor.commit();

                }
}

                private boolean checkLoginStatus(){


                    boolean rb0 = prefs.getBoolean("rb0", false);
                    return rb0;

                }

答案 2 :(得分:0)

在使用之前尝试清除编辑器。

Editor editor = preferences.edit();
editor.clear();
editor.putString(email, e);
editor.commit();

检查一下:https://looksok.wordpress.com/2012/09/21/sharedpreferences-not-saved-after-app-restart/