Android 当应用程序重新启动时,共享首选项值将再次显示

Android 当应用程序重新启动时,共享首选项值将再次显示,android,sharedpreferences,Android,Sharedpreferences,我有两个活动..在第一个Loginactivity中,如果单击按钮,则我将在sahred Preferences中存储值;在第二个活动中,即第一个屏幕中,如果单击按钮,则我将退出按钮,然后重新移动存储的sharedpreferences值 ..退出应用程序并重新启动应用程序后,如果我打印,则打印共享首选项存储的值…如果我注销,则完全删除这些值 public class LoginActivity extends ActionBarActivity { User myApplication;

我有两个活动..在第一个Loginactivity中,如果单击按钮,则我将在sahred Preferences中存储值;在第二个活动中,即第一个屏幕中,如果单击按钮,则我将退出按钮,然后重新移动存储的sharedpreferences值

..退出应用程序并重新启动应用程序后,如果我打印,则打印共享首选项存储的值…如果我注销,则完全删除这些值

public class LoginActivity extends ActionBarActivity {


 User myApplication;

    EditText username,passwordField;
    Button login;
    CheckBox check;

    SharedPreferences settings;
    SharedPreferences.Editor editor;
    String userStored;
    String passwordStored;
     boolean checked =false;
     boolean checkboxvalue;
     public static final String PREFS_NAME = "Shared_File";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);




login.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub




        //  settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());


                settings = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);               
                editor = settings.edit();                                   
                editor.putString("User_Shared", username.getText().toString());
                editor.putString("Pass_Shared", passwordField.getText().toString());                
                //editor.putBoolean("Checkbox_Click", true);

                editor.commit();

                userStored = settings.getString("User_Shared",null);
                passwordStored =settings.getString("Pass_Shared", null);                     


                System.out.println("userStored :::" +userStored + " :::::::pasword :::::::" +passwordStored  );

                 Intent intent =  new Intent(getApplicationContext(),FirstScreen.class);
                 startActivity(intent);

            }   


    }
});



}
}           





public class FirstScreen extends Activity {


    Button logout;

    SharedPreferences settings;
    SharedPreferences.Editor editor;
    public static final String PREFS_NAME = "Shared_File";

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.firstscreen);




  logout =(Button)findViewById(R.id.logout);

  logout.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    //  settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

        settings =getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
        editor = settings.edit();   

           try {

               editor.remove("User_Shared");
               editor.remove("Pass_Shared");


                   editor.clear();
               editor.commit();
        }

           catch (NullPointerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
           catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 


    Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
            //intent.putExtra("Logout", logout);

        startActivity(intent);



    }
});



}
}           

这与活动生命周期有关。您应该将与SharedReferences相关的代码放在onPause方法中。代码的错误在于它将键值对存储在SharedReferences对象中,但当您按下back按钮或活动退出活动状态时,键值对将被擦除。
所以,试试我的建议。祝你好运,伙计。希望,这是有益的。

你说起来很容易

editor.putString("User_Shared", null);

一切都会正常工作。

共享首选项用于持久化数据,除非手动删除,否则不会删除。什么是Logcat输出?是的。。。如果我注销,它必须被永久删除…kiran和123456假设…如果我使用此值登录并注销,则字段必须为空..如果再次打开应用程序,我将获得kiran和123456..必须为空。如果按下注销,值将被删除,否则即使重新启动应用程序,它也将保留值。您可以删除活动的onStop方法中的值。我必须在登录时存储用户输入的值,而在注销时我必须删除…我知道:登录时您已经将代码编辑器放入了。putStringUser_Shared,username.getText.toString;editor.putStringPass\u共享,passwordField.getText.toString;现在,当您单击“注销”按钮时,将null放入SharedRef中,下次打开应用程序时,您将检查凭据中的null,如果为null,则将用户带到登录屏幕