2014-01-28 53 views
1

所以這裏的傢伙是個問題,我擡頭看着這個可以SharedPreferences.Editor.commit()在同一個活動/片段中多次使用

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#commit%28%29

,並提到,「請注意,當兩個編輯同時修改首選項時,最後一個調用commit的成功。「

說我的活動是這樣的:

SharedPreferences.Editor editor(); 
    onCreate(....) 
    { 
     //start the instance of editor 
    ...... 
     if(condition1) 
     editor.put... 
     editor.commit() 

    } 

    onPause() 
    { 
    if(condition1) 
    { 
     editor.commit() 
    } 
    } 
請問

這項工作?因爲在我的應用程序中,我必須在線時存儲用戶憑據,並且在離線時(即condition1)記錄用戶標識的服務器(即記錄用戶標識)的服務器很少。 onPause是我做的地方。所以任何人都可以證實這一點。謝謝。

** putBoolean()似乎正常工作。這是一個龐大的代碼片斷,所以我可能會在用戶憑據邏輯的某處出錯。所以,我只是想用editor.commit()的用法來確認。*

+0

是的。每次你想保存一個值,你都必須提交它。 – Prachur

回答

2

如果你有一個類成員SharedPreferences.Editor編輯器,那麼,你可以無需擔心在全班使用它。另外,請看方法簽名:

public abstract boolean commit() 

您可以檢查提交的結果以確保值已成功寫入。

boolean result = editor.commit(); 
+0

很好的解釋。特別是關於方法簽名。多謝兄弟。我很愚蠢,不去看看那個。哈哈 ! – uLYsseus

+0

不客氣。 – Melquiades

1

是的,在大多數情況下,這將在您提供的示例中工作(按照正確的順序工作)。如果你想絕對確保修改都執行,那麼你可以同步他們..

例如:

private void someSaveMethod() { 
    synchronized(this) { 
     //TODO perform your retrieval of the PreferencesEditor 
     editor.commit(); 
    } 
} 
+0

那麼這不是我正在尋找的東西,但它確實爲上述答案增加了很大的價值。謝謝。 – uLYsseus

+0

啊,是的。我想我有些誤解你在問什麼。 – RocketSpock

相關問題