PracticU

The Request Code

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

The Request Code
מתי באמת צריך Request Code? כשאותה אקטיביטי בן משרתת כמה מטרות, ואקטיביטי האב צריכה לדעת באיזה הקשר היא נפתחה. הדוגמה כאן: מסך ראשי עם לחצן לקליטת אימייל ולחצן לקליטת טלפון, שניהם משתמשים באקטיביטי בן אחת.
מהלך הדוגמה
1. אקטיביטי כללית: יוצרים DetailsActivity ריקה שקולטת נתון בודד אחד. בתוכה TextView לכותרת (עם id, marginTop 50 וגודל 25sp), EditText מתחתיו, ולחצני OK ו-Cancel עם אירועי onClick.
2. האב קובע את הכותרת: האקטיביטי הכללית לא יודעת מה לבקש, ולכן האב שולח בעזרת putExtra את labelText, למשל Enter your email או Enter your phone.
3. קבוע שונה לכל בקשה: מגדירים שני קבועים, REQUEST_CODE_EMAIL שווה 1 ו-REQUEST_CODE_PHONE שווה 2. כל לחצן קורא ל-startActivityForResult עם הקבוע שלו.
4. קריאה בבן: ב-onCreate שולפים את labelText מה-Intent בעזרת getStringExtra ומציגים אותו ב-TextView.
5. החזרה ב-OK: יוצרים Intent, שמים בו putExtra בשם user data עם הטקסט מה-EditText, ואז setResult(RESULT_OK, intent) ו-finish(). ב-Cancel קוראים ל-setResult(RESULT_CANCELED) ול-finish() בלי Intent.
6. הבחנה באב: ב-onActivityResult אם resultCode הוא RESULT_CANCELED לא עושים כלום. אחרת בודקים את requestCode: אימייל מוצג ב-TextView של האימייל, טלפון ב-TextView של הטלפון. כדאי לכתוב else if עם בדיקה מפורשת ולא סתם else, כי בהמשך יתווספו בקשות.
7. ולידציה: אם המשתמש לוחץ OK בלי להקליד כלום, הבן מחזירה מחרוזת ריקה. לכן לפני ההחזרה שומרים את הטקסט במשתנה data, ואם הוא ריק מציגים Toast עם Data can't be blank, צובעים את ה-EditText באדום וקוראים ל-return.
טעויות נפוצות
- השוואת מחרוזת ריקה בעזרת == לא עבדה בדוגמה, והפתרון היה להשתמש ב-equals.
- לחצן Cancel לא מבצע ולידציה, ולכן אינו מציג הודעה.
אחרי השיעור אפשר להשתמש באקטיביטי בן אחת לכמה מטרות, ולהבחין בעזרת requestCode מה הוחזר.
השיעור הבא בקורס: Prevent Keyboard Auto Display

פרקי ההרצאה: The Request Code

  1. 00:00

    שימוש אמיתי ב-Request Code

  2. 00:54

    Child Activity כללית לקליטת נתון

  3. 01:31

    בניית המסך של DetailsActivity

  4. 05:42

    פתיחת המסך עם כותרת מתאימה

  5. 07:14

    Request Code שונה לאימייל ולטלפון

  6. 08:51

    הצגת הכותרת ב-DetailsActivity

  7. 10:37

    החזרת הנתון או ביטול עם setResult

  8. 12:21

    טיפול בתוצאה ב-onActivityResult

תמלול ההרצאה: The Request Code

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

  1. 00:02

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

  2. 00:21

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

  3. 00:42

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

  4. 00:51

    ואנחנו רוצים לבצע את הקליטות על ידי Child Activity שתאפשר למשתמש לקלוט את המידע. אבל אנחנו לא רוצים עכשיו לבנות Child Activity אחד בשביל לקלוט אימייל, צ'יילד אקטיביטי אחר בשביל לקלוט טלפון.

  5. 01:08

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

  6. 01:20

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

  7. 01:32

    ניגש לאפ מיו אקטיביטי ואנחנו רוצים לבחור Empty Activity ניתן לה את השם Details Activity נבצע Finish ויש לנו כאן את ה-Child Activity של ה-Details בואו ניגש לכאן יש לנו פה Relative Layout ובסדר לנו בואו נבנה קודם כל איזשהו טקסט view שאומר למשתמש מה בעצם אנחנו רוצים ממנו

  8. 02:04

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

  9. 02:22

    אז יש לנו פה wrap-content, בואו ניתן ID בכדי לעדכן את ההודעה הזאת דרך הקוד, כל פעם זו הודעה אחרת הרי, אז יש לנו פה טקסט view-label בצורה כזאת, דיר מרג'ים טופ של איזה 50, כדי שזה יהיה היפה למטה ו-text size של בוא נניח 25 SP.

  10. 02:54

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

  11. 03:08

    בהייט יש לנו כאן ID בכדי לשלוף את המידע, אדי טקסט דאטה, איזשהו דאטה כללי, מרג'ין טופ 50. בואו נגדיר שהוא הוא נמצא בלואו ה-ID של ה-Text View Label ואז הוא מתחתיו, וגם ה-Text Size שלנו זה 25 SP. לאחר מכן יש לנו לחצן עבור אישור ולחצן עבור ביטול.

  12. 03:45

    בואו ניקח Wrap Content עבור הלחצן, ניתן לו Align Parent Bottom True, Align Parent Left True, יש לנו Text All Caps False, יש לנו טקסט סייז 25, יש לנו טקסט אוקיי ויש לנו און קליק שזה יהיה באטן אוקיי און קליק. בואו נשכפל את הלחצן הזה, יש לנו פה עליין פרנט רייט,

  13. 04:34

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

  14. 04:59

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

  15. 05:15

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

  16. 05:40

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

  17. 06:00

    אז הנה ה-intent שלנו, intent=new-intent ואנחנו רוצים להגיד שאנחנו אלה שמציגים את ה-child, כלומר אנחנו ה-parent, זה יהיה this ואנחנו רוצים להציג את ה-details-activity.class.

  18. 06:19

    לאחר מכן אנחנו רוצים לתת ערך עבור ה-label של ה-child-activity. זה יהיה על ידי intent.putExtra ועבור ה-label טקסט אנחנו רוצים לכתוב enter your email עכשיו למה בעצם הפרנט אקטיביטי צריך לדאוג להצגה של הלייבל ב-child אקטיביטי בגלל שה-child אקטיביטי הוא כללי במקרה הזה ה-detail הזה הוא כללי

  19. 06:53

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

  20. 07:07

    לאחר מכן אנחנו רוצים to start activity for result לשלוח גם את ה-intent ולשלוח גם איזשהו request code וכאן בדיוק אנחנו רואים את הייעוד ואת השימוש ב-request code.

  21. 07:24

    אנחנו עכשיו כן רוצים להעביר request code שונה עבור האימייל ו-request קוד שונה עבור הטלפון בכדי שאנחנו נדע כאשר אנחנו מקבלים את התשובה בחזרה מה ה-child activity החזירה לנו האם זה אימייל או האם זה טלפון ולכן אנחנו צריכים לגשת פה למעלה ולבנות לעצמנו איזשהו קבוע בואו ניקח private final int ונקרא לו rick

  22. 07:51

    west code email ובואו נניח שהוא שווה ל-1 ניקח את זה ונשים כאן. כעת אנחנו רוצים לבצע את אותו הדבר בדיוק עבור הלחצן של הטלפון אבל הלייבל טקסט זה enter your phone ואנחנו רוצים request code phone אז בואו ניגש פה למעלה ctrl d משכפל לנו את כל השורה ונגדיר request code phone והוא כמובן חייב להיות קבוע אחר בואו נניח הקבוע 2 אנחנו חוזרים לפה ואומרים לו

  23. 08:35

    שאנחנו רוצים לשלוח את ה-request code phone. אז קודם כל מבחינת התהליך ביצענו את הקריאה ל-child activity, כלומר את ההצגה של ה-child activity מה-parent activity.

  24. 08:49

    הדבר הבא שאנחנו רוצים לעשות זה לבנות את ה-child activity. אז בואו ניגש לקוד של ה-child activity שזה בעצם ה-details activity.

  25. 08:59

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

  26. 09:38

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

  27. 10:25

    ל-text-view-label.toset-text את ה-label-text. והנה הפרנט אקטיביטי הגדיר לנו מה בעצם הכותרת שהיוזר הולך לראות ב-details-activity.

  28. 10:38

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

  29. 10:51

    אז יש לנו כאן intent, intent שווה new intent, יש לנו כאן intent.put extra אנחנו רוצים להחזיר את המידע עכשיו המידע הזה יכול להיות אימייל הוא יכול להיות טלפון הוא יכול להיות בהמשך דברים אחרים שם פרטי שם משפחה אנחנו לא מגדירים מה המידע ולכן נגדיר אותו כuser data לא יודע מה זה מה שהuser הביא לי זה המידע לאחר מכן Edit Text Data,

  30. 11:27

    Get Text ובואו נהפוך אותו לסטרינג טהור ואז אנחנו רוצים To Set Result הנה יש לנו פה את ה-Result OK ואת ה-Intent ומיד אחר כך To Finish.

  31. 11:44

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

  32. 12:14

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

  33. 12:41

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

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

ההרצאה הקודמת: Receive Data Back from Activity

ההרצאה הבאה: Prevent Keyboard Auto Display

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

  • Secure Code
  • הוספת Request לטסט
  • Pattern - Request-Reply
  • Code and Fix Model

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

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