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