title: Android: Keep username in session until logout
body: <p>I'm having hard time trying to figure out how to use SharedPreferences to store the username in the phone and stay in session until logout. I also need to know how at the same time its in session it will send the username out with the data the user click on within the listview. Below are the codes I am using and would like to know where and what code to put in order to acheive this. As login it will go to the menu and stay at the menu (avoid the backbutton from going back to the login screen) Every menu have a logout item which will go back to the login screen.</p>
  
  <p>The previous questions i've looked at are <a href="https://stackoverflow.com/questions/6047691/android-user-login-and-stays-in-session-until-logout-which-needs-approval">this</a> and <a href="https://stackoverflow.com/search?q=sharedpref">this</a></p>
  
  <p>Logcat Detail</p>
  
  <pre><code>05-26 10:42:19.146: WARN/KeyCharacterMap(26071): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
  05-26 10:42:23.926: DEBUG/AndroidRuntime(26071): Shutting down VM
  05-26 10:42:23.926: WARN/dalvikvm(26071): threadid=3: thread exiting with uncaught exception (group=0x40013140)
  05-26 10:42:23.926: ERROR/AndroidRuntime(26071): Uncaught handler: thread main exiting due to uncaught exception
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071): java.lang.NullPointerException
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at com.merrill2.Login$1.onClick(Login.java:42)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.view.View.performClick(View.java:2232)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.view.View.onTouchEvent(View.java:3905)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.widget.TextView.onTouchEvent(TextView.java:6414)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.view.View.dispatchTouchEvent(View.java:3421)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:906)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:906)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:906)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:906)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.app.Activity.dispatchTouchEvent(Activity.java:1993)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1533)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.os.Handler.dispatchMessage(Handler.java:99)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.os.Looper.loop(Looper.java:123)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at android.app.ActivityThread.main(ActivityThread.java:3992)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at java.lang.reflect.Method.invokeNative(Native Method)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at java.lang.reflect.Method.invoke(Method.java:521)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
  05-26 10:42:23.936: ERROR/AndroidRuntime(26071):     at dalvik.system.NativeStart.main(Native Method)
  05-26 10:42:23.946: INFO/Process(899): Sending signal. PID: 26071 SIG: 3
  05-26 10:42:23.956: INFO/dalvikvm(26071): threadid=7: reacting to signal 3
  05-26 10:42:23.966: INFO/dalvikvm(26071): Wrote stack trace to '/data/anr/traces.txt'
  05-26 10:42:25.646: DEBUG/dalvikvm(25722): GC freed 973 objects / 63040 bytes in 93ms
  05-26 10:42:27.777: DEBUG/DispatchService(945): Handled message = TIMED_SERVICE_UNMASK
  05-26 10:42:29.856: DEBUG/DispatchService(945): DISPATCH SERVICE getIdenPacketDataState: returning: 4
  05-26 10:42:29.876: INFO/iDENWAPReceiver(953): Received a android.intent.action.ANY_DATA_STATE
  </code></pre>
  
  <p>Login.java</p>
  
  <pre><code>public class Login extends Activity {
      protected static final SharedPreferences settings = null;
      private EditText etUsername;
      private Button btnLogin;
      private Button btnCancel;
      private TextView lblResult;
      /** Called when the activity is first created. */
      //@Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.login);
  
          etUsername = (EditText)findViewById(R.id.username);
          btnLogin = (Button)findViewById(R.id.login_button);
          btnCancel = (Button)findViewById(R.id.cancel_button);
          lblResult = (TextView)findViewById(R.id.result);
  
          btnLogin.setOnClickListener(new OnClickListener() {
              //@Override
              public void onClick(View v) {
              // Check Login
              String username = etUsername.getText().toString();
  
              SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
              SharedPreferences.Editor editor = settings.edit();
              editor.putString("username", username);
  
              if(username.equals("1111")){
                  lblResult.setText("Login successful.");
  
                  //startActivity(new Intent(this, Activity2.class));
  
  
                  Intent i = new Intent(getApplicationContext(), Customer.class);
                  startActivity(i);
  </code></pre>
  
  <p>if i take out the line below: </p>
  
  <pre><code>protected static final SharedPreferences settings = null;
  </code></pre>
  
  <p>i put this:</p>
  
  <pre><code>btnLogin.setOnClickListener(new OnClickListener() {
              private SharedPreferences settings;
  </code></pre>
  
  <p>'settings' is giving error so i had to use one of those line mentioned above</p>