שמירת נתונים פשוטים באמצעות SharedPreferences

אם יש אוסף קטן יחסית של ערכי מפתח שרוצים לשמור, אפשר להשתמש בממשקי ה-API של SharedPreferences. אובייקט SharedPreferences שמפנה לקובץ שמכיל צמדי מפתח-ערך, ומספק שיטות פשוטות לקריאה וכותבים אותן. כל קובץ SharedPreferences מנוהל על ידי ה-framework וגם יכולים להיות פרטיים או משותפים.

בדף הזה מוסבר איך להשתמש בממשקי ה-API של SharedPreferences כדי לאחסן לאחזר ערכים פשוטים.

קבלת כינוי להעדפות משותפות

ניתן ליצור קובץ העדפות משותפות חדש או לגשת לקובץ קיים באמצעות קריאה אחת מהשיטות הבאות:

  • getSharedPreferences(): כדאי להשתמש באפשרות הזו אם צריכים מספר פריטים משותפים קובצי העדפות המזוהים לפי שם, שאותו מציינים עם הפרמטר. אפשר להתקשר למספר הזה מכל Context באפליקציה.
  • getPreferences(): אפשר להשתמש באפשרות הזו מ-Activity אם צריך כדי להשתמש בקובץ העדפות משותף אחד בלבד עבור הפעילות. כי זה מאחזר קובץ ברירת מחדל של העדפה משותפת ששייך לפעילות, אין צורך לספק שם.

לדוגמה, הקוד הבא ניגש לקובץ ההעדפות המשותפות מזוהה על ידי מחרוזת המשאב R.string.preference_file_key ופותח אותו באמצעות מצב פרטי, כך שהקובץ יהיה נגיש רק לאפליקציה שלכם:

Kotlin

val sharedPref = activity?.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE)

Java

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

כשמעניקים שמות לקובצי ההעדפות המשותפות, צריך להשתמש בשם ייחודי ניתן לזיהוי באפליקציה. דרך טובה לעשות זאת היא להוסיף לשם הקובץ את הקידומת הבאה את מזהה האפליקציה שלך. מוצרים לדוגמה: "com.example.myapp.PREFERENCE_FILE_KEY"

לחלופין, אם אתם צריכים רק קובץ העדפות משותף אחד בשביל הפעילות שלכם, אפשר להשתמש בשיטה getPreferences():

Kotlin

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)

Java

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

אם אתם משתמשים ב-API של SharedPreferences כדי לשמור הגדרות של אפליקציות, במקום זאת, צריך להשתמש ב-getDefaultSharedPreferences() כדי לקבל את ברירת המחדל קובץ העדפות משותף לכל האפליקציה. מידע נוסף זמין במאמר מדריך ההגדרות למפתחים.

כתיבה להעדפות משותפות

כדי לכתוב בקובץ העדפות משותף, צריך ליצור SharedPreferences.Editor על ידי התקשרות אל edit() ב-SharedPreferences שלך.

מעבירים את המפתחות והערכים שרוצים לכתוב באמצעות שיטות כמו: הפקודה putInt() והפקודה putString(). לאחר מכן קוראים אל apply() או commit() כדי לשמור את השינויים. לדוגמה:

Kotlin

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    putInt(getString(R.string.saved_high_score_key), newHighScore)
    apply()
}

Java

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

השדה apply() משנה את האובייקט SharedPreferences שבזיכרון באופן מיידי, אבל כותבת את העדכונים לדיסק באופן אסינכרוני. לחלופין, אפשר להשתמש ב-commit() כדי לכתוב את הנתונים לדיסק באופן סינכרוני. אבל מכיוון ש-commit() הוא סינכרוני, לא כדאי לחייג אליו מהשרשור הראשי כי זה עלול לגרום להשהיה של ממשק המשתמש ברינדור.

הקראה מהעדפות משותפות

כדי לאחזר ערכים מקובץ העדפות משותף, צריך להשתמש בשיטות קריאה כמו getInt() ו-getString(), שמספקים את המפתח לערך שרוצים, ואפשר גם להגדיר ערך ברירת מחדל שיוחזר אם המפתח לא קיים. עבור דוגמה:

Kotlin

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key)
val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)

Java

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key);
int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);