共享首选项似乎不会在会话中保存用户名

时间:2011-06-07 21:10:08

标签: android login username logout sharedpreferences

有几天,我一直试图让用户名正确保存在会话中。首先,我打开了应用程序,它将打开登录屏幕。我使用用户名登录,然后它会转到MainActivity。现在我退出应用程序并重新打开应用程序以确保保存用户名并且它将通过登录屏幕并直接进入MainActivity。到目前为止一直很好,然后我会退出,它将返回到登录屏幕。我想确保它已完全注销,所以我退出应用程序并重新打开应用程序,它将带我进入MainActivity。我无法弄清楚如何解决这个问题。

我的登录类

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("username", username);
        editor.commit();


        if(prefs.getString("username", null)!=username)
        {Intent i = new Intent(getApplicationContext(), Customer.class); 
        startActivity(i);}


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

            if(username.equals("1111")){
                lblResult.setText("Login successful.");

                 Intent i = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(i);

我的退出课程

public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.logout);

        code = (EditText)findViewById(R.id.codeout);
        btnLogout = (Button) findViewById(R.id.submit);
        btnCancel = (Button) findViewById(R.id.cancel);
        lblResult = (TextView)findViewById(R.id.result);

        btnLogout.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String logout = code.getText().toString();

                if (logout.equals("99")){
                    lblResult.setText("Logout successful");

                    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

                    SharedPreferences.Editor editor = prefs.edit();
                    editor.remove("username");
                    editor.commit();

                    Intent i = new Intent(getApplicationContext(), Login.class);
                    startActivity(i);

                    finish();

2 个答案:

答案 0 :(得分:1)

您应该使用equals()方法比较字符串,而不是!=。另外,不要将null设为默认值:

if(!prefs.getString("username", "").equals(username))

答案 1 :(得分:1)

除非我遗漏了某些内容,否则您似乎在首选项中设置username,然后立即检查该值。似乎这个if语句总是会通过:

if(prefs.getString("username", null)!=username)

另外,正如@inazaruk指出的那样,您应该使用equals()代替==进行String比较。