2017-09-10 62 views
2

以下代碼是處理SharedPreference中兩個變量的存在性的代碼片段。當我第一次運行應用程序時,它成功地保存了變量的值(editor.commit返回TRUE)。當我退出應用程序並重新啓動時, settings.contains無法找到我的第一次運行時創建的兩個變量/鍵,它們是共享的首選項。結果我的應用程序創建了另一個值,這不應該到其他條件)。共享首選項無法找到已創建的密鑰

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    SharedPreferences settings = 
    PreferenceManager.getDefaultSharedPreferences(this); 

    SharedPreferences.Editor editor=settings.edit(); 


    if (settings.contains("passug1")) 
     Passug1=settings.getString("passug1",""); 
    else { 
     sendJson1(); 
     editor = settings.edit(); 
     //sendJson1(); 
     editor.putString("passug1", Passug1); 
     if (editor.commit()) 
      System.out.println("Successfully saved"); 
     else 
      System.out.println("Not saved"); 
     //editor.apply(); 
    } 
    if (settings.contains("passug2")) 
     Passug2=settings.getString("passug2",""); 
    else 
    { 
     sendJson2(); 
     editor = settings.edit(); 
     //sendJson2(); 
     editor.putString("passug2", Passug2); 
     if (editor.commit()) 
      System.out.println("Successfully saved"); 
     else 
      System.out.println("Not saved"); 
     //editor.commit(); 
     //editor.apply(); 
    } 
+0

我應該在某處預先爲共享偏好創建一個xml嗎?我沒有那樣做。 –

+0

請給我們任何一個可以編譯和運行的[mcve]。 –

回答

0

測試你的代碼後,在我看來,沒有什麼爲什麼被保存到你的喜好是因爲你的Passug1Passug2字段爲空,因此要保存空值偏好的唯一原因。將空值傳遞給putString實際上將使用該鍵刪除任何現有的值。如果您的sendJson1()sendJson2()方法是打算Passug1Passug2分配一個值您應該檢查,看他們是否正常運行。

其次,你在你的代碼中使用System.out.println,它通常不會在普通的logcat Android日誌系統中輸出任何東西,這可能會讓你很難確定你的代碼是否工作。您應該使用android.util.Log類中的方法來完成日誌記錄。

最後,您最初致電settings.edit()是多餘的。