PracticU

Content Provider - חלק 5

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Content Provider - חלק 5
מילון מושגים:
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
Android - מערכת הפעלה מבוססת Linux לטלפונים ולמכשירים ניידים, שפותחה על ידי גוגל.
ArrayList - מבנה נתונים של רשימה דינמית שגודלה משתנה, הנפוץ בשפות כמו Java ו-C#.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.

Content Provider - חלק 5
בהמשך לקריאת שמות אנשי הקשר, כאן שולפים גם את כתובות האימייל של כל איש קשר. האימיילים נשמרים בטבלה נפרדת, ולכן צריך שאילתה שנייה.
איך זה עובד
האימיילים בטבלה נפרדת כי לאיש קשר אחד יכולים להיות כמה אימיילים (אצל אחד מאנשי הקשר בדוגמה יש שלושה). בטבלת האימיילים עמודת ה-ID של איש הקשר נקראת contact_id, והיא מצביעה על _id מטבלת אנשי הקשר. שם העמודות יכול להיות שונה בין הטבלאות. ה-URI של הטבלה השנייה מתחיל באותו authority, com.android.contacts, אבל הנתונים הם data/emails.
השלבים העיקריים
1. מחלקת Contact: מוסיפים ArrayList<String> של אימיילים, פונקציה addEmail שמוסיפה כתובת אחת, ו-toString מעודכנת: השם, ירידת שורה, ואז כל אימייל עם tab וירידת שורה.
2. קבועים לטבלת האימיילים: URI מ-ContactsContract.CommonDataKinds.Email.CONTENT_URI, עמודת איש הקשר CONTACT_ID ועמודת הכתובת ADDRESS. בטבלה עצמה שם העמודה הוא data1, אבל זה לא משנה כי משתמשים בקבוע.
3. שאילתה לכל איש קשר: בתוך הלולאה שרצה על אנשי הקשר, ולפני הוספת האובייקט לרשימה, קוראים ל-query על טבלת האימיילים עם selection שבו עמודת ה-contact id שווה ל-ID של איש הקשר הנוכחי. כך מקבלים רק את האימיילים שלו.
4. קריאת האימיילים: מקבלים את אינדקס עמודת האימייל, רצים עם while ו-moveToNext (כי יכולים להיות כמה), וקוראים כל כתובת עם getString ומוסיפים אותה ל-Contact עם addEmail.
5. סגירה: סוגרים את emailsCursor אחרי הלולאה.
אחרי ההרצה כל איש קשר מוצג עם האימיילים שלו מתחת לשם.
שימו לב
כדי לצרוך ספק תוכן של אפליקציה אחרת צריך לדעת את שמות ה-URI והעמודות, מקבועי מערכת או ממחרוזות שמתועדות. לכן קוראים את התיעוד של האפליקציה שחושפת את המידע.
כעת אפשר לשאול טבלה שנייה לפי ה-ID של רשומה מהטבלה הראשונה, עם WHERE בתוך השאילתה, ולצרוך נתונים קשורים מספק תוכן.

פרקי ההרצאה: Content Provider - חלק 5

  1. 00:00

    שליפת האימיילים של אנשי הקשר

  2. 00:35

    העמודה Contact ID בטבלת האימיילים

  3. 01:52

    URI של טבלת האימיילים

  4. 02:30

    רשימת אימיילים במחלקה Contact

  5. 03:14

    עדכון toString להצגת האימיילים

  6. 04:19

    קבועים לטבלת האימיילים

  7. 06:23

    עמודת כתובת האימייל

  8. 07:03

    קריאת ה-ID והשם מהקורסור

תמלול ההרצאה: Content Provider - חלק 5

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

  1. 00:00

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

  2. 00:24

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

  3. 01:00

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

  4. 01:17

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

  5. 01:31

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

  6. 01:50

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

  7. 02:06

    כאן אנחנו רואים שה-URI של הטבלה השנייה זה אותה התחלה content.com.android.contacts אבל ה-data זה כבר לא contact אלא נקרא data/emails. אוקיי אז בואו כבר נבצע את השינויים הדרושים בשביל להצליח להוציא את האימיילים עבור כל אחד מהקונטקטס.

  8. 02:32

    והשינוי הראשון שאנחנו צריכים זה לגשת לטבלת הקונטקט, או ליתר דיוק למחלקה של הקונטקט, ולהוסיף כאן private arraylist של סטרינג, אימיילס שווה new arraylist בצורה כזאת.

  9. 02:54

    למה? כי אנחנו רוצים שלקונטקט אחד יוכלו להיות כמה אימיילים. מה שאנחנו רוצים להוסיף בנוסף לזה זאת פונקציה שלא מחזירה כלום ונקראת addEmail, שנוכל דרכה להוסיף E-Mail אחד ויחיד.

  10. 03:14

    אנחנו רוצים לפנות ל-E-Mails, addE-Mail אחד ויחיד. אנחנו רוצים את ה-toString לשנות גם כן, יש לנו פה String Str, ניתן שיהיה בה את ה-Name, משורשר עם איזה ירידת שורה, ואנחנו רוצים for each string email in רשימת האימיילים, נשים את הכל באותה שורה,

  11. 03:51

    לגשת ל-str ולצרף, בואו נעשה איזה backslash t כזה, שזה tab, ואז את האימייל, וירידת שורה, backslash n.

  12. 04:09

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

  13. 04:32

    ואנחנו מתחילים בקבועים. כאן אנחנו צריכים שיהיו לנו קבועים שמתארים גם את רשימת האימיילים. אז בואו נעתיק את ה-URI הזה וזה יהיה לא קונטקטס טייבל אלא E-Mails טייבל והקבוע שמצביע עליו זה contactscontracts נקודה כאן זה נקרא common data kind.email זאת טבלת האימיילים ויש לנו content URI. בואו ניפטר מזה ולמעשה

  14. 04:49

    פה אנחנו ניגשים ל-com android contacts שם היה לנו דאטה סלאש אימיילס ניפטר מכל היתר וזאת בעצם המחרוזת שזה יביא לנו, מחרוזת ה-URI.

  15. 05:35

    הקבוע הבא שאנחנו רוצים, בואו נעתיק לדוגמה את המחרוזת הזאת של ה-ID, נדביק אותה ומה שאנחנו רוצים זה גישה ל-Emails טייבל וב-Emails טייבל אנחנו רוצים את Contact ID column.

  16. 05:54

    זה נמצא בcontact.common.datacounts.email.contact. underline.id והקבוע הזה למעשה אחרי שבדקתי הוא נקרא contact.underline.id נשכפל בתוך emails table יש לנו גם את הקבוע של האימייל אז זה בעצם יהיה אימייל column ואנחנו רוצים לגשת ולהגיע לאדרס, זה בעצם הקבוע,

  17. 06:40

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

  18. 07:02

    Good. אז הנה יש לנו את שלושת הקבועים הבאים: יש לנו בתוך הפונקציה getContacts את ה-ArrayList של כל ה-contacts, יש לנו את ה-contentProvider, קיבלנו קורסור לרשימת ה-contacts וזאת רשימה נפרדת מהאימיילים, הנה בעצם שני האינדקסים של ה-ID ושל ה-Name ומה

  19. 07:26

    שאנחנו רוצים זה עכשיו להוציא את הערכים עצמם, הנה ה-ID של הקונטקט, הנה ה-Name שלו, הנה יצירה של אובייקט הקונטקט.

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

ההרצאה הקודמת: Content Provider - חלק 4

ההרצאה הבאה: מצלמה - חלק 1 - צילום תמונה

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

  • הסבר על Provider ב-Flutter
  • הגדרת AWS provider - פרויקט NodeJS

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

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