不知道这里发生了什么

时间:2012-05-28 23:30:26

标签: android android-preferences

所以我有一个SharedPreference我正在调用logged_in。我得到偏好并检查它是否为1,如果是它应该启动新活动,否则我希望它向我显示它实际上是什么。这是代码:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

        prefs = getSharedPreferences("preferences", MODE_PRIVATE);

        // Check if the user is logged in
        String loggedIn = prefs.getString("logged_in", null);

        if(loggedIn != "1") {
            setContentView(R.layout.main);
            TextView textView = (TextView) findViewById(R.id.login_status);
            textView.setText(prefs.getString("logged_in", null));
        }

        else {
            startActivity(new Intent(this, LoggedInActivity.class));
        }
    }

真正奇怪的是它会加载主视图而不是启动LoggedIn活动,但它会将logged_in首选项显示为1.所以根据我所看到的,它应该是启动新活动,但事实并非如此。我真的很困惑。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

您正在比较引用而不是字符串值。也就是说,你是说这两个引用指向同一个对象而不是这两个对象的内容是相同的。你应该这样做:

if( !loggedIn.equals("1") )

但请注意,如果loggedInnull,则该代码将引发NullPointerException。所以这更合适:

if( loggedIn == null || !loggedIn.equals("1") )

也就是说,在这种特殊情况下,使用int首选项会更好。