2012-05-20 65 views
2

我越來越奇怪的問題與我的應用程序。 我已經建立一個SharedPreference,這樣SharedPreferences沒有閱讀

SharedPreferences prefs = PreferenceManager 
       .getDefaultSharedPreferences(this); 
     flag = prefs.getBoolean("handle_calls", false); 
     if (flag) { 
      SharedPreferences.Editor editor = prefs.edit(); 
      editor.clear(); 
      editor.putBoolean("checkFlag", true); 
      editor.commit(); 
     } 

它工作正常,前一些日子,但現在這個代碼工作正常,但當我嘗試在我的SmsReceiver類SharedPreferences閱讀這些偏好犯規讀取這些值並且默認值被讀取(false)...有時它工作並且大部分時間根本不起作用! 這裏是我如何讀SharedPreferences

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    SmsManager sms = SmsManager.getDefault(); 

    //flag = prefs.getBoolean("handle_calls", false); 
    checkFlag = prefs.getBoolean("checkFlag", false); 
    checkDecisionFlag = prefs.getBoolean("checkDecisionFlag", false); 

checkDecisionFlag工作正常,但checkFlag正在採取默認值。

真的很生氣!請幫忙!

回答

0

解決了! 這段代碼很好,而問題是面向生命週期。我有另一個SharedPreference這取決於。這是一次又一次的失誤。

2

刪除editor.clear();如果條件。如清除將清除SharedPreference中的所有數據。

if (flag) { 
     SharedPreferences.Editor editor = prefs.edit(); 

     editor.putBoolean("checkFlag", true); 
     editor.commit(); 
    } 
+0

也因爲最近工作正常,只需一次卸載並再次安裝應用程序。 –

+0

嘗試卸載,並在編寫此代碼之前,我使用的代碼沒有'clear()' –

0

我想你想的第一個代碼示例的第三行使用,如果(!標誌)(標誌)。

+0

不,我打算這樣寫.. –