2012-05-28 192 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

哦,快點!謝謝你,先生!我覺得我應該知道這一點。無論如何,不​​會再犯這個錯誤!欣賞它! –