שמירת נתונים פשוטים באמצעות 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() הוא סינכרוני, לא כדאי לקרוא אותו מה-thread הראשי כי הוא עלול להשהות את הרינדור של ממשק המשתמש.

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

כדי לאחזר ערכים מקובץ העדפות משותף, צריך להשתמש בשיטות קריאה כמו 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);