2012-05-28 156 views
0

所以我有一个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。所以根据我所看到的,它应该开始新的活动,但事实并非如此。我对此很困惑。任何帮助是极大的赞赏。

回答

4

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

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

不过请注意,如果loggedInnull,该代码将引发NullPointerException。因此,这将是比较合适的:

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

这就是说,在这种特殊情况下,你会通过使用int偏好更好。

+0

哦,快点!谢谢你,先生!我觉得我应该知道这一点。无论如何,不​​会再犯这个错误!欣赏它! –