PracticU

Serializable

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Serializable
מילון מושגים:
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
Android - מערכת הפעלה מבוססת Linux לטלפונים ולמכשירים ניידים, שפותחה על ידי גוגל.
Intent - ב-Android, אובייקט הודעה שמבקש פעולה, למשל מעבר בין מסכים או הפעלת רכיב אחר.
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.

Serializable
putExtra מקבלת טיפוסים פשוטים כמו int ו-String, אבל לפעמים רוצים לשלוח אובייקט מהמחלקה שלנו, למשל פריט שנבחר מרשימה. בשיעור שולחים אובייקט Book למסך שני בעזרת הממשק Serializable.
השלבים העיקריים
1. המחלקה: Book עם שלושה שדות פרטיים: שם (name), סופר (author) ומחיר (price), גטרים וסטרים וקונסטרקטור שעובר דרך הסטרים, ו-toString שמחזיר "שם by סופר" ואת המחיר עם סימן דולר.
2. ניסיון שליחה רגיל: יוצרים Book (Android is fun, מוישה, 95.7) וקוראים ל-intent.putExtra("book", book). הקוד לא מתקמפל, כי לפונקציה אין גרסה שמקבלת את המחלקה, והמערכת לא יודעת איך להעביר את תוכנה.
3. הפתרון: המחלקה מממשת את Serializable. זה ממשק בלי פונקציות, ורק מסמן למערכת שמותר להפוך את האובייקט למידע שאפשר לשלוח.
4. איך זה עובד: Java משתמשת ב-reflection, כלומר בוחנת את השדות של האובייקט, שולפת את הערכים שלו ומעבירה אותם לאקטיביטי היעד.
5. קבלה: ב-SecondActivity קוראים ל-getIntent().getSerializableExtra("book") ועושים cast ל-Book.
6. הצגה: מוסיפים TextView (textViewBook) מתחת לכותרת עם below ו-wrap_content, ומציבים בו book.toString(). בהרצה מופיעים הכותרת, הצבע והפרטים של הספר.
שימו לב
- בהתחלה שני ה-TextView הופיעו אחד על השני, כי היו match_parent. התיקון: below ו-wrap_content.
- מנגנון ה-Serializable אינו יעיל, כי פעולת ה-reflection כבדה בזיכרון. דרך יעילה יותר מוצגת בשיעור הבא.
אחרי השיעור אפשר לשלוח אובייקט מהמחלקה שלכם בין אקטיביטיז באמצעות Serializable.
השיעור הבא בקורס: Parcelable

פרקי ההרצאה: Serializable

  1. 00:00

    שליחת אובייקט ממחלקה משלנו

  2. 00:40

    מחלקת Book עם Getters ו-Setters

  3. 01:45

    הוספת toString למחלקה

  4. 02:47

    יצירת אובייקט Book ב-MainActivity

  5. 03:24

    ניסיון לשלוח את האובייקט עם putExtra

  6. 04:02

    למה putExtra לא מקבל את האובייקט

  7. 05:01

    מימוש הממשק Serializable

  8. 06:12

    איך Reflection מעביר את הנתונים

תמלול ההרצאה: Serializable

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

  1. 00:01

    כאשר אנחנו שולחים מידע מה-Parent Activity ל-Child Activity יכול להיות שאנחנו בעצם לא רוצים לבצע שליחה רק של אלמנטים פרימיטיביים כמו Int או String אלא אנחנו רוצים לבצע שליחה של אובייקט ממחלקה משלנו.

  2. 00:22

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

  3. 00:44

    אז אם אנחנו רוצים לעשות את זה יש עוד משהו חשוב שאנחנו צריכים להבין ולשלב בכדי להצליח לבצע את זה. אז לצורך הדוגמה בואו פשוט נצרף כאן עוד איזושהי מחלקה, בואו נקרא לה Book והיא מתארת ספר, יש לספר לספר יש private string name יש לנו private string author סופר ויש לנו

  4. 01:14

    price בואו נלחץ על Alt insert ונצרף גטרים וסטרים את שלושתם בואו נצרף על ידי Alt insert גם קונסטרקטור שיאכל את שלושתם אך במקום להכניס ישירות את המידע בואו נעבור דרך הסטרים set name וקצת יותר הגיוני set author ולבסוף set price והנה יש לנו עכשיו גם קונסטרקטור ובואו ניגש

  5. 01:57

    פה למטה ונבצע alt insert ונוסיף לעצמנו איזושהי to string נחמדה כזאת שתאפשר פשוט להציג את כל המידע בצורה הבאה בואו נחזיר את הנים משורשר עם המילה ביי כלומר שם הספר ביי הסופר ובואו נשרשר רק את המחיר בכדי לראות את כל המשתנים כולם.

  6. 02:33

    נשרשר פה איזה סימן של דולר בצורה כזאת והנה ארגנו לעצמנו איזושהי מחלקה מאוד פשוטה שמתארת ספר שיש לו שם סופר ומחיר ואנחנו רוצים עכשיו לשלוח מה-Parent Activity שזה ה-Main ל-Second Activity Object Book אז בואו ניגש לפה ונבנה לנו Book שווה New Book ואנחנו רואים שיש לנו פה

  7. 03:05

    קונסטרקטור בואו ניגש וניתן לו את השם Android is Fun בואו נגיד שהסופר זה מוישה ובואו נגיד שהמחיר זה 95.7 והנה יש לנו עכשיו אובייקט בוק.

  8. 03:25

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

  9. 03:46

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

  10. 04:23

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

  11. 04:55

    אז כל מה שאנחנו צריכים לעשות בכדי לגרום לזה להצליח זה לגשת למחלקה Book ולרשת אינטרפייס מיוחד יותר נכון Implement אינטרפייס מיוחד שהאינטרפייס הזה נקרא Declarative Interface מה זאת אומרת זה אומר שזה אינטרפייס שאין בו בכלל פונקציות זה אינטרפייס מאוד מעניין והאינטרפייס הספציפי הזה נקרא serializable.

  12. 05:27

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

  13. 05:28

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

  14. 06:18

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

  15. 06:44

    פעולת הרפלקשן הזאת מאפשרת לג'אווה לראות בדיוק מה יש בתוך המחלקה הזאת לשלוף את המידע ולשלוח אותו. פעולת הרפלקשן היא כבדה יחסית בזיכרון ולכן הפעולה הזאת היא לא הכי יעילה.

  16. 06:59

    איך לעשות את זה בצורה יותר יעילה נראה בהמשך.

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

ההרצאה הקודמת: Send Data to Activity

ההרצאה הבאה: Parcelable

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

  • serializable - transaction isolation level

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

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