title: Android. How to save user name and password after the app is closed?
body: <p>I am writing an application with login details (username and password).<br>
  I want to make it so that when the user closes the application and starts it again later he/she doesn't have to enter his/her user name and password again.</p>
  
  <p>So here is my code so far. It doesn't seem to remember the password nor the username, unfortunately for me:</p>
  
  <pre><code>protected void onCreate(Bundle savedInstanceState) 
  {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_login);
  
      mPrefs = getSharedPreferences(PREFS, 0);
      final CheckBox rememberMeCbx = (CheckBox)findViewById(R.id.saveLoginCheckBox);
  
      boolean rememberMe = mPrefs.getBoolean("rememberMe", false);
  
  
  
      if (android.os.Build.VERSION.SDK_INT &gt; 9)
      {
          StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
          StrictMode.setThreadPolicy(policy);
      }
      mXmlRpcClient = new XMLRPCClient(mXmlRpcUri);
  
      // Set up the login form.
      //mUsername = getIntent().getStringExtra(EXTRA_EMAIL);
      mUsernameView = (EditText) findViewById(R.id.username);
      mUsernameView.setText(mUsername);
  
      mPasswordView = (EditText) findViewById(R.id.password);
      mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                  @Override
                  public boolean onEditorAction(TextView textView, int id,
                          KeyEvent keyEvent) {
                      if (id == R.id.login || id == EditorInfo.IME_NULL) {
                          attemptLogin();
                          return true;
                      }
                      return false;
                  }
              });
  
      mLoginFormView = findViewById(R.id.login_form);
      mLoginStatusView = findViewById(R.id.login_status);
      mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message);
  
      findViewById(R.id.sign_in_button).setOnClickListener
      (
              new View.OnClickListener()
              {
                  @Override
                  public void onClick(View view) 
                  {
                      if(rememberMeCbx.isChecked())
                      {
                          attemptLogin(); //function to check if fields are filled correctly
                          saveLoginDetails();
                      }
                      else
                      {
                          attemptLogin();
                          removeLoginDetails();
                      }
  
                  }
              });
  
      if(rememberMe == true)
      {
          //get previously stored login details
          String login = mPrefs.getString("mUsername", null);
          String upass = mPrefs.getString("mPassword", null);
  
          if(login != null &amp;&amp; upass != null)
          {
              //fill input boxes with stored login and pass
              EditText loginEbx = (EditText)findViewById(R.id.username);
              EditText passEbx = (EditText)findViewById(R.id.password);
              loginEbx.setText(login);
              passEbx.setText(upass);
  
              //set the check box to 'checked'                
              rememberMeCbx.setChecked(true);
          }
      }
  }
  
  
  
  /**
   * Represents an asynchronous login/registration task used to authenticate
   * the user.
   */
  public class UserLoginTask extends AsyncTask&lt;Void, Void, Boolean&gt; {
      @Override
      protected Boolean doInBackground(Void... params) {
          try {
              mSessionID = (String)mXmlRpcClient.call(mLoginFuncName, mUsername, mPassword);
              return true;
          } catch (Exception e) {
              return false;
          }
      }
  
      @Override
      protected void onPostExecute(final Boolean success) {
          mAuthTask = null;
          showProgress(false);
  
          if (success) {
              finish();
              Intent intent = new Intent(LoginActivity.this, MainWindow.class);
              intent.putExtra("SessionID", mSessionID);
              intent.putExtra("XmlRpcUrl", mXmlRpcUrl);
              intent.putExtra("LoginFuncName", mLoginFuncName);
              intent.putExtra("LogoutFuncName", mLogoutFuncName);
              intent.putExtra("GetDevicesFuncName", mGetDevicesFuncName);
              intent.putExtra("SendPositionFuncName", mSendPositionFuncName);
              intent.putExtra("GetSavedTripFunc", mGetSavedTripFunc);             
              startActivity(intent);
          } else {
              mPasswordView
                      .setError(getString(R.string.error_incorrect_password));
              mPasswordView.requestFocus();
          }
      }
  
  
  }
  
  private void saveLoginDetails()
  {
      //fill input boxes with stored login and pass
      EditText loginEbx = (EditText)findViewById(R.id.username);
      EditText passEbx = (EditText)findViewById(R.id.password);
      String login = loginEbx.getText().toString();
      String upass = passEbx.getText().toString();
  
      Editor e = mPrefs.edit();
      e.putBoolean("rememberMe", true);
      e.putString("login", login);
      e.putString("password", upass);
      e.commit();
  }
  
  private void removeLoginDetails()
  {
      Editor e = mPrefs.edit();
      e.putBoolean("rememberMe", false);
      e.remove("login");
      e.remove("password");
      e.commit();
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Can you tell me what is wrong with my code and how can I improve it so that the user name and password are saved and retrieved after the application is closed and opened again?</p>