0

だから私はlogged_inと呼んでいるSharedPreferenceを持っています。設定を取得し、それが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として表示されます。したがって、私が見ているものによれば、新しいアクティビティを開始するはずですが、そうではありません。 。私はこれについて本当に混乱しています。どんな助けでも大歓迎です。

4

1 に答える 1

4

文字列値の代わりに参照を比較しています。つまり、この2つのオブジェクトのコンテンツが同じではなく、これら2つの参照が同じオブジェクトを指しているということです。代わりに行う必要があります:

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

ただし、がの場合、そのコードloggedInは。nullを発生させることに注意してくださいNullPointerException。したがって、これはより適切です。

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

とは言うものの、この特定のケースでは、設定を使用する方がよいでしょうint

于 2012-05-28T23:33:59.967 に答える