PracticU

Shared Preferences Helper Class

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Shared Preferences Helper Class
מילון מושגים:
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
שם משתמש - מזהה ייחודי שמשתמש מזין כדי להזדהות במערכת, לרוב יחד עם סיסמה.
דיסק - התקן לאחסון קבוע של נתונים, כמו כונן קשיח (HDD) או כונן מבוסס זיכרון מהיר (SSD).

Shared Preferences Helper Class
שמירה וטעינה של Shared Preferences דורשות כל פעם כמה שורות: יצירת האובייקט, Editor ו-commit. השיעור מראה איך לארוז את זה במחלקת עזר סטטית, כך שהקוד באפליקציה יהיה קצר ונקי.
בניית המחלקה
1. גישה ל-Context: getSharedPreferences שייכת ל-Context. במחלקה שאינה Activity משתמשים במחלקה MyApp שיורשת מ-Application, שומרת Context סטטי ב-onCreate ומחזירה אותו בפונקציה סטטית. מגדירים אותה במאניפסט כמחלקת האפליקציה.
2. מחלקת SharedPreferencesHelper: מכילה פונקציות סטטיות. הפונקציה save מקבלת מפתח וערך, משיגה Context מ-MyApp.getContext(), מקבלת את האובייקט עם MODE_PRIVATE, פותחת Editor, קוראת ל-putString ול-commit.
3. עומס יתר לסוגים נוספים: משכפלים את save עבור int עם putInt. אפשר להשתמש באותו שם כי הפרמטרים שונים.
4. שימוש ב-MainActivity: כל בלוק השמירה מוחלף בקריאה אחת SharedPreferencesHelper.save.
5. פונקציות טעינה: אי אפשר להבדיל פונקציות לפי ערך מוחזר בלבד, ולכן יש loadString ו-loadInt. כל אחת קיימת בשתי גרסאות: עם ערך ברירת מחדל, וגרסה שמעבירה null (למחרוזת) או 0 (ל-int) ומשתמשת בגרסה הראשונה.
6. החלפת הקוד ב-onCreate: קוראים ישירות ל-loadString("username"), ול-loadInt בלי להעביר 0.
שימו לב
- הקוד הנוסף הוא קוד תשתית שאפשר להשתמש בו בכל האפליקציה ובאפליקציות אחרות.
- הוא עלול להיות איטי יותר, כי כל save מבצע שוב השגת Context, אובייקט ו-Editor, וגם commit, שהוא כתיבה לדיסק. אם שומרים הרבה ערכים בבת אחת, עדיף Editor אחד, כמה put ו-commit אחד בסוף. אם המהירות לא חשובה, המחלקה מתאימה.
אחרי השיעור אפשר לשמור ולטעון Shared Preferences בשורה אחת בכל מקום באפליקציה.
השיעור הבא בקורס: Shared Preferences Listener

פרקי ההרצאה: Shared Preferences Helper Class

  1. 00:00

    למה לבנות מחלקת עזר

  2. 00:59

    השגת Context מכל מקום עם MyApp

  3. 02:20

    בניית פונקציית save במחלקת העזר

  4. 03:59

    תמיכה בטיפוסים נוספים כמו int

  5. 04:57

    שימוש במחלקת העזר ב-Main Activity

  6. 06:02

    פונקציות טעינה loadString

  7. 07:10

    העמסה עם ערך ברירת מחדל null

תמלול ההרצאה: Shared Preferences Helper Class

הטקסט המלא של הדקות הראשונות בהרצאה «Shared Preferences Helper Class» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    כששמרנו מידע על ה-Shared Preferences היינו צריכים לבנות אובייקט מסוג Shared Preferences לקבל אותו על ידי הפונקציה Get Shared Preferences עם איזושהי מכרוזת ספציפית עבור האפליקציה שלנו, לאחר מכן להביא אובייקט אדיטור ממנו, לבצע את השמירה ואז בסוף לבצע קומיט.

  2. 00:22

    כאשר רצינו לטעון את הנתונים עשינו בדיוק את אותו הדבר על ידי יצירת האובייקט עם אותה המכרוזת, כאן לא היינו צריכים את האדיטור ומיד קראנו את הנתונים.

  3. 00:33

    אז אין בעיה לבצע את הפעולות האלה בכל מקום באפליקציה שבה אנחנו רוצים לשמור שירט פרפרנסס ובכל מקום שבו אנחנו רוצים לטעון שירט פרפרנסס.

  4. 00:45

    אבל לפעמים כדאי לבנות איזושהי מחלקה נפרדת שהיא תהיה מעין מחלקת עזר כזאת שתעשה עבורנו את השמירה ואת התאנה ואז הקוד עצמו יהיה הרבה יותר נקי והרבה פחות שורות קוד עבור טיפול ב-shared preferences אז בואו נעשה את זה לפני שנתחיל לבנות את המחלקה הזאת רק נראה שהפונקציה get shared preferences נמצאת ברמת הקונטקסט

  5. 01:13

    אם אנחנו רוצים במחלקה אחרת שהיא לא activity והיא לא בעצמה קונטקסט להשיג את הקונטקסט אנחנו צריכים לבצע את הטריק ההוא שעשינו פעם שמאפשר להשיג את הקונטקסט מכל מקום אז בואו נעשה את זה בואו נבנה מחלקה נקרא לה my app נגדיר בתוכה private static context הנה יש לנו פה את המשתנה הקונטקסט המחלקה צריכה לרשת את אפליקיישן אנחנו צריכים לדרוס את onCreate

  6. 01:53

    לקרוא ל-super onCreate ולקחת את הקונטקסט נבצע עוד פונקציה סטטית שמאפשרת להחזיר את הקונטקסט והנה סיימנו לבנות את המחלקה מיי-אפ אנחנו צריכים להגדיר שהמניפסט נבנה על ידי המחלקה הזאת, או שהאפליקציה ליתר דיוק נבנית על ידי המחלקה

  7. 02:19

    הזאת, שהיא יורשת בתורה את אפליקיישן. ועכשיו יש לנו קונטקסט מכל מקום. אז אנחנו יכולים עכשיו לגשת ולהוסיף מחלקה חדשה. בואו נקרא לה Shared Preferences Helper.

  8. 02:37

    המחלקה הזאת תכיל פונקציות סטטיות המאפשרות לכתוב מידע ל-Shared Preferences ולקרוא מה-Shared Preferences. בואו נתחיל עם כתיבה.

  9. 02:48

    אז נבנה פה פונקציה סטטית, שנקראת פשוט save. הפונקציה מקבלת את המפתח, הפונקציה מקבלת את ה-value וכל מה שהיא עושה זה שומרת את המידע הזה ל-shared preferences.

  10. 03:07

    בואו נשיג קונטקסט, my app get context ואז אנחנו יכולים לפנות ל-shared preferences דרך הקונטקסט, לתת לו את preferences context mode private, mode private זה קבוע ששייך לקונטקסט ועכשיו אנחנו אנחנו יכולים להשיג את האדיטור SharedPreferencesEditor נבנה אובייקט ממנו על ידי

  11. 03:42

    SharedPreferences.Edit והנה יש לנו את האדיטור ואנחנו יכולים עכשיו לבצע את הכתיבה. אנחנו רוצים לכתוב רק דבר אחד Editor.PutString ואנחנו רוצים את ה-Key ואת ה-Value שקיבלנו.

  12. 04:00

    לבסוף Editor.Commit ופה סיימנו את הפונקציה. הפונקציה שבנינו מטפלת אך ורק במחרוזת. אם אנחנו רוצים לטפל בעוד טיפוסים באפליקציה אנחנו צריכים לשכפל את הפונקציה הזאת ולגרום לה לטפל בטיפוסים נוספים.

  13. 04:19

    לדוגמה int זה יהיה במקום putString putInt אז זה נכון שאנחנו כאילו משכפלים הרבה פונקציות אבל אנחנו עושים את זה פעם אחת כדי שמעכשיו אנחנו נוכל בקלות לשמור מידע ל-shared preferences פשוט על ידי הפונקציות הסטטיות שבנינו.

  14. 04:41

    לא נצטרך יותר להתעסק עם המכרוזות האלה, עם המוד פרייבט, לקבל את ה-shared preferences מהמערכת וכולי. פשוט בכל פעם שאנחנו מבצעים שמירה לא יהיו לנו שלוש שורות, תהיה לנו שורה אחת.

  15. 04:57

    אוקיי, אז יש לנו פה את ה-saving שכרגע רק בנינו פונקציות שמאפשרות לשמור מכרוזת ואינטג'ר. איך אנחנו משתמשים בסייבינג? בואו נחזור למיין אקטיביטי ובמקום כל הפקודות האלה פקודה ראשונה נעיף את כל זאת ואת הפקודה הזאת ואת ה-commit אין לנו צורך בהם כל מה שאנחנו

  16. 05:24

    רוצים לעשות זה לפנות ל-shared preferences helper.save רק את המידע שלנו שכרגע זה סטרינג ואינטג'ר בואו נשכפל את זה גם לכאן והנה יש לנו הרבה פחות קוד שאנחנו יכולים בעזרתו לבצע את השמירה של מידע ל-shared preferences.

  17. 05:54

    בואו ניפטר פה מכל מיני שורות בצורה כזאת. כעת אנחנו רוצים לבצע את אותו הדבר עבור התאנה לצורך כך אנחנו צריכים לבנות פונקציות שטוענות מידע אבל כאן כאן אנחנו לא נוכל כבר להשתמש במעין העמסה כזאת של טיפוסים שונים, מפני שהפונקציות צריכות להחזיר טיפוס שונה, ואנחנו לא יכולים לבצע העמסה של פונקציות,

  18. 06:21

    כלומר מספר פונקציות עם אותו השם, כאשר מה שמבדיל בין אחת לשנייה זה רק הערך המוחזר או הטיפוס המוחזר. אז בואו נבנה פונקציה שמחזירה סטרינג והיא נקראת LoadString, היא תקבל רק את המפתח ותחזיר את הפריט.

  19. 06:45

    עוד פעם אנחנו צריכים את ה-context, בואו ניקח אותו גם לפה. הדבר הבא שאנחנו צריכים זה את אותו Object Shared Preferences, ופשוט להחזיר Shared Preferences, נקודה Get String, הנה המפתח ואין לי פה איזשהו value של ערך ברירת מחדל.

  20. 07:11

    אז מה שנעשה, נעשה כזה דבר. דבר ראשון, נשכפל את הפונקציה LoadString כך שהיא תחוויר גם ערך עם ברירת מחדל וגם ערך בלי ברירת מחדל.

  21. 07:26

    אז יש לנו פה את ה-DefaultValue שניתן לה בצורה כזאת, והדבר הבא שנעשה, ונשכפל את הפונקציה הזאת לעוד אחת שתחזיר ערך עם ברירת מחדל נ"ל.

  22. 07:46

    נחזיר את LoadString הקודמת שבנינו עם נ"ל. עכשיו בואו נסתכל לרגע על שתי הפונקציות האלה. הפונקציה הראשונה LoadString אומרת לנו תנו לי את המפתח של הפריט מהשארד פרפרנסס ואיזשהו ערך ברת מחדל של במידה והפריט לא נמצא אני אביא לכם את הערך ברת מחדל הזה.

  23. 08:07

    ואז אנחנו משתמשים בערך ברת מחדל בשביל להביא את הפריט מהשארד פרפרנסס. הפריט כאמור הוא סטרינג ולכן LoadString מחזירה סטרינג.

  24. 08:17

    אבל אנחנו יודעים שהרבה פעמים באפליקציה אנחנו מעוניינים פשוט להחזיר נ"ל בתור ערך ברת מחדל. נניח שזה המצב באפליקציה שלנו, אז אין שום בעיה, נבצע העמסה נוספת שמשתמשת בהעמסה הקודמת עם נ"ל.

  25. 08:33

    אז בכל מקום באפליקציה שאנחנו רוצים שאיך הבחדל יהיה נ"ל, אנחנו לא צריכים להעביר

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Save and Load Shared Preferences

ההרצאה הבאה: Shared Preferences Listener

הרצאות קשורות מקורסים אחרים

  • Static Class
  • הגדרת Class - חלק 1
  • תיבת דואר משותפת - shared mailbox
  • תרגול Dynamic Class

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון