2017-04-26 20 views
0

我正在將一些數據從片段保存到SharedPreference,並希望在其他片段中使用這些數據。但是我只想在SharedPreferences成功保存的情況下執行片段事務,否則其他片段將無法檢索數據(因爲使用這些SharedPreference值來檢索數據)。如何知道Android SharedPreferences已成功保存?

我的代碼:

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{ 

    ... ... ... ... ... ... ... ... ... 

    public void setSharedPref(String key, String val) { 
     SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putString(key, val); 
     editor.commit(); 

    } 

    public String fetchSharedPref(String key) { 
     SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
     String val = sharedPref.getString(key, Constant.SHARED_PREF_DEFAULT_MSN); 
     return val; 
    } 
} 

我如何可以肯定的是SharedPreferences成功保存?
有沒有什麼辦法可以實現只有在SharedPreferences保存成功時纔會調用的回調函數?

+1

據我所知,'Editor.commit'返回您需要的東西 –

+1

您可以通過Editor.commit() –

+0

Editor.commit() – Anu

回答

2

來自docs

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putInt(getString(R.string.saved_high_score), newHighScore); 
editor.commit(); 

然後去檢查commit()方法here

返回類型:布爾

說明:返回true,如果新的值成功寫入到永久存儲。

+1

來判斷您的鏈接是俄語。請把它改成英文。 –

+0

完成。我認爲這個頁面還沒有翻譯。 –

1

形式Documentation

適用()

這立即將數據保存到內存中,並保存在一個單獨的線程中的數據 盤。所以沒有機會阻止主線程 (您的應用程序不會掛起)。

這是首選技術,但自從 薑餅(API 9,Android 2.3)以來纔可用。

提交()

調用此然而將數據保存到文件中,這個過程是在 調用它,停止一切 ,直到保存完成的線程進行。 成功完成時返回true,失敗時返回 。

使用commit()如果需要保存 數據,或者如果你是預薑餅設備開發成功的確認。 commit() 因爲API 1

已經可以讓你可以在editor.commit();

commit()回報true檢查狀態,如果保存作品,false否則。

1

找到解決方案之間

public boolean setSharedPref(String key, String val) { 
    SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPref.edit(); 
    editor.putString(key, val); 
    return editor.commit() 
} 

差異:)

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putInt("Your Key", "Your value"); 
boolean savedOrNot = editor.commit(); 

if(savedOrNot){ 
// Successfully saved 
}else{ 
// Not saved 
} 
1

的editor.commit(將返回boolean值,它會讓你知道,如果數據已保存。

如果你想分析保存在共享偏好和SQLite的所有數據,那麼我會建議使用facebook stetho

其調試橋是Android,您可以查看所有的共享偏好數據和SQL數據庫爲調試。