
Serializable עובדת, אבל היא איטית כי היא נשענת על רפלקשן. כאן רואים טכניקה יעילה יותר, שבה אנחנו קובעים בעצמנו אילו נתונים נשלחים ובאיזה סדר.Parcelable ואומרים למערכת במדויק אילו Data Member לכתוב ולקרוא ובאיזה סדר. כך מנגנון הרפלקשן יוצא מהתמונה והמערכת מהירה יותר.Serializable ויורשים את Parcelable, ואז Alt-Enter ו-Implement Methods. describeContents לא בשימוש כאן. ב-writeToParcel כותבים ל-dest את הנתונים: writeString ל-name, writeString ל-author ו-writeDouble ל-price. ה-Parcel הוא חבילה שבתוכה שמים את המידע ושולחים לאקטיביטי היעד.Parcel בשם in, והוא קורא את הנתונים בדיוק באותו הסדר שבו נכתבו: name, author, price.CREATOR סטטי ו-final, שבו היא משתמשת כדי ליצור אובייקט Book חדש ולקרוא אליו את המידע. אין לגעת בו ויש להשאיר אותו כפי שהוא.putExtra, כי יש לה גרסה שמקבלת Parcelable. באקטיביטי היעד מחליפים את getSerializableExtra ב-getParcelableExtra.writeToParcel: כתיבת הנתונים לחבילה.dest.writeString, dest.writeDouble: כתיבה לפי סדר.in.readString, in.readDouble: קריאה לפי אותו סדר.getParcelableExtra: שליפת האובייקט באקטיביטי היעד.Parcelable.הטקסט המלא של הדקות הראשונות בהרצאה «Parcelable» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם ראינו איך אנחנו יכולים להעביר מפרנט אקטיביטי לצ'יילד אקטיביטי אובייקט ממחלקה משלנו במקרה הזה זה היה אובייקט ממחלקה בוק שבנינו כאשר בשביל להצליח לעשות את זה היינו צריכים לממש אינטרפייס שנקרא סריאליזאבל וכל מה שזה עשה זה ציין לג'אווה ולמערכת של אנדרואיד פשוט לקרוא את כל הדאטה
ממבר שקיימים באובייקט על ידי מנגנון רפלקשן שבסוגל להסתכל בתוך אובייקט, לחפור בתוכו, לראות בדיוק מה יש בו, לקרוא על ידי כל מיני פונקציות מאוד יחסית כבדות את מה שיש בתוכו וכך לשלוף את המידע.
וראינו גם שכל הסיפור הזה זה לא הדבר הכי יעיל שיש. יכול להיות שאנחנו רוצים להעביר כמויות גדולות של חומר יחסית מאקטיביטי אחת לאקטיביטי אחרת והדבר הזה קצת זולל זמן ומשאבים.
בסרטון הזה אנחנו הולכים לראות טכניקה נוספת בשביל להצליח לעשות את זה שהיא הרבה יותר יעילה. הקונספט אומר כזה דבר אם אנחנו יורשים את האינטרפייס סריאליזאבל אז המערכת משתמשת ברפלקשן בשביל פשוט לראות לכל הכיוונים ולהיכנס ולשלוף את כל מה שיש בתוך האובייקט.
כל מה שאנחנו צריכים לעשות זה לממש אינטרפייס אחר שמאפשר לנו להגדיר בדיוק אילו Data Member עלינו לקחת ולשלוח באובייקט או בדאטה שנשלח מה-Parent Activity ל-Child Activity.
ממש אילו Data Member ומה הסדר שאנחנו רוצים לקרוא ולכתוב אותם בצד השני. אם אנחנו מגדירים את זה, אז אין פה יותר מנגנון של סריאליזיישן, יש פה פונקציות ספציפיות שהמערכת קוראת להן.
אנחנו אומרים לפונקציות האלה אילו דאטה ממבר, מה המידע המדויק שאנחנו רוצים לקרוא ולכתוב בצד השני והמערכת פשוט משתמשת במידע שאנחנו נתנו ואז אנחנו הוצאנו את מנגנון הרפלקשן מהסיפור ולכן המערכת היא הרבה יותר יעילה.
אז כל מה שאנחנו צריכים לעשות זה פשוט ללכת ולהוריד את האינטרפייס סריאליזבל ולרשת אינטרפייס שנקרא פרסלבל זה האינטרפייס עכשיו בואו ניגש ונלחץ על אלט אנטר ונגדיר אימפלמנט methods ויש לנו כאן את המספר פונקציות כאלה בואו נבצע אוקיי ונראה מה המערכת מראה לנו ואפשר להתפטר אין לנו יותר פה סריאליזבל יש לנו את פרסל ופרסלבול ובואו ניגש ונראה בדיוק מה יש לנו
כאן שאנחנו צריכים לממש. אז בואו נעשה פה איזשהו אב כזה ונראה שמכאן מלמעלה עד לפה זה הדאטה של המחלקה עצמה שכתבנו ומתחת לקו זה מה אנחנו צריכים לממש עבור האינטרפייס פרסלבול ושימו שעדיין יש לנו איזושהי שגיאה על המחלקה Book שתכף נטפל בה.
אז הדבר הראשון שאנחנו צריכים להסתכל ולראות שקיים כאן זה Describe Contents וזה מבחינתנו Not in Use. אנחנו לא משתמשים איתו לפחות כרגע. הדבר הבא זה Write to Parcel ומה שאנחנו רוצים לכתוב זה Save דיזיירד דאטה, איזה דאטה אנחנו רוצים לכתוב לאקטיביטי היעד שלנו.
דרך אגב, פרסל זה צרור או חבילה בעצם שאנחנו רוצים לקחת את המידע שלנו, לשים בתוך החבילה הזאת ולשלוח לאקטיביטי היעד. יש לנו כאן את הדסט, קיצור של דסטיניישן, דרך הדסט אנחנו מכניסים בדיוק את הדברים שאנחנו רוצים.
לדוגמה writeString ואנחנו רוצים לכתוב קודם כל את ה-Name של הספר destination.writeString אנחנו מוצאים את ה-Autor יש לנו destination.writeDouble וזה יהיה ה-Price וחשוב מאוד הסדר של הכתיבה באותו הסדר בדיוק אנחנו צריכים לחלץ את המידע.
אז קודם כל יש לנו את שתי הפונקציות האלה שמימשנו ונתנו להם תוכן מתאים עכשיו בואו ניגש לבוק נחכה שיהיה את המנורה האדומה ונלחץ על add enter ונגדיר add parcelable implementation נלחץ ונראה שהמערכת מוסיפה לנו עוד כל מיני דברים מוזרים למחלקה שלנו פותר רגע מהdirectives האלה ניקח
את כל הסיפור הזה נגזור וגם נשים כאן שנראה שזה כל הדברים שקשורים למנגנון הפרסלבל שיש לנו ואנחנו נמצאים כאן במערכת מספר שלוש האמת זה מערכת מספר שלוש אבל יש לנו גם את זה שזה גם כן התווסף לנו וזה קונסטרקטור כזה בואו נשים אותו פה אז למעשה הקונסטרקטור זה הדבר השלישי שיש
והדבר הזה זה דבר מספר 4. הקונסטרקטור קודם כל מאפשר לנו לקרוא את המידע. אנחנו רואים שהוא מקבל פרסל אין ואנחנו רואים שהוא כבר הציע לנו לקרוא את המידע באותו הסדר name שווה in.readstring author שווה in.readstring ו-price שווה ל-in.readdouble אז המימוש הזה בעצם זה מימוש שאוטומטית קיבלנו
שקורא את המידע באותו הסדר של הכתיבה. אם אנחנו כתבנו קודם כל name, אחר כך הארתור ואחר כך פרייס, אנחנו קוראים קודם כל name, אחר כך הארתור ואחר כך פרייס, אנחנו לא נותנים למערכת לנחש על ידי מנגנון רפלקשן איזה מידע אנחנו רוצים.
נתנו בדיוק את המידע לכתיבה לתוך החבילה הזאת, הפרסל, ובדיוק איזה מידע אנחנו רוצים לקרוא מהחבילה, שזה כמובן אותו מידע שכתבנו באותו הסדר.
אז יש לנו פה constructor for reading the data. והדבר האחרון שיש לנו זה בעצם מה שנקרא creator object. הדבר הזה חייב להיות בדיוק באותו שם creator המערכת נותנת לנו וזה בעצם איזשהו שימוש פנימי של המערכת שמאפשרת לה ליצור אובייקט בוק חדש ולקרוא דרכו את המידע.
אתם רואים שזה גם static וזה final ומנגנון Java משתמשת בקריאטור בשביל לייצר אובייקט בוק ולקרוא את המידע ולהחזיר לנו את האובייקט הזה אלא אם כן יש לנו מערך ואז היא משתמשת