PracticU

Content Provider - חלק 4

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

Content Provider - חלק 4
הצריכה כאן היא של Content Provider שקיים במכשיר: רשימת אנשי הקשר של המשתמש. לוחצים על לחצן וממלאים TextView בשמות אנשי הקשר.
השלבים העיקריים
1. מחלקת Contact: מחלקה פשוטה עם שדה name, getters ו-setters, קונסטרקטור שמקבל שם, ו-toString שמחזירה את השם.
2. מחלקת ContactsManager: מכילה פונקציה סטטית getContacts שמחזירה ArrayList<Contact>. היא שואבת קורסור של אנשי הקשר, ממלאת את הרשימה באובייקטים חדשים וסוגרת את הקורסור.
3. ידע חיצוני נדרש: אי אפשר לנחש את כתובת ה-URI ושמות העמודות. הם נמצאים בתיעוד של אנדרואיד, והמרצה סיכם אותם במסמך Word. הטבלה: content://com.android.contacts/contacts, עם העמודות _id ו-display_name.
4. קבועים במקום מחרוזות: עדיף להשתמש בקבועי המערכת: ContactsContract.Contacts.CONTENT_URI עבור ה-URI, ContactsContract.Contacts._ID ו-ContactsContract.Contacts.DISPLAY_NAME עבור העמודות. כך מגדירים קבועים פרטיים משלנו שמצביעים עליהם.
5. השאילתה: מקבלים getContentResolver() מהמחלקה הגלובלית MyApp, וקוראים ל-query עם ה-URI ושאר הפרמטרים (projection, where, args, sort) כ-null, כדי להביא את כל הטבלה.
6. קריאת הנתונים: מבקשים את אינדקס העמודות מהקורסור ולא מנחשים אותו, רצים עם moveToNext, קוראים את ה-ID ואת השם ומוסיפים אובייקט Contact לרשימה. ה-ID לא בשימוש כרגע.
7. הצגה: בלחצן ב-MainActivity עוברים על הרשימה ב-foreach ומוסיפים כל שם ל-TextView עם append, כולל קו מפריד.
8. הרשאה: ב-Manifest מוסיפים uses-permission עם READ_CONTACTS, אחרת אין אישור לקרוא את אנשי הקשר.
שימו לב
את הדוגמה בדקו על מכשיר אמיתי בלבד, כי רק בו הוגדרו אנשי קשר. אפשר להוסיף גם CursorLoader.
אפשר עכשיו לקרוא את שמות אנשי הקשר של המשתמש דרך ספק התוכן של המערכת.
השיעור הבא בקורס: Content Provider - חלק 5

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

  1. 00:00

    צריכת רשימת אנשי הקשר במכשיר

  2. 01:12

    מחלקה Contact לאיש קשר

  3. 02:14

    מחלקת ContactsManager ו-getContacts

  4. 03:37

    URI ושמות עמודות מהתיעוד

  5. 04:32

    טבלת אנשי הקשר ועמודותיה

  6. 05:53

    קבועים מובנים ל-URI

  7. 07:08

    קבועים לעמודות ID ו-Display Name

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

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

  1. 00:01

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

  2. 00:20

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

  3. 00:46

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

  4. 01:06

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

  5. 01:21

    היא מתארת קונטקט אחד ויחיד, כלומר איש קשר אחד ויחיד, שיש ליוזר במכשיר. בואו נבנה פה private string name, זה יהיה השם של ה-contact, בואו נצרף כאן על ידי alt insert getters and setters ואיזשהו קונסטרקטור public contact שמקבל name ומבצע set name עבור ה-name, ונוסף איזושהי פונקציית toString שפשוט

  6. 02:02

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

  7. 02:20

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

  8. 02:37

    בואו נקרא למחלקה הזאת קונטקטס מנאג'ר. אנחנו רוצים לגשת ובמחלקה לבנות פונקציה public static שמחזירה הרייליסט של קונטקט המחלקה שבנינו. בואו נקרא לפונקציה get contacts ועל המחלקה הזאת לייצר arraylist מסוג contact, בואו נקרא ל-arraylist הזה contacts שווה new arraylist בצורה כזאת, ובסיום הפונקציה אנחנו פשוט מחזירים את כל

  9. 03:16

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

  10. 03:41

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

  11. 03:56

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

  12. 04:06

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

  13. 04:25

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

  14. 04:40

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

  15. 05:08

    הטבלה עצמה מכילה underline ID וזה ה-IDs, display underline name זה השם של העמודה שמכילה את ה-display name של הקונטקטס, כלומר מה השמות שלהם, יש לנו כאן first name ו-last name, יש פה פשוט display name, וכמובן יש פה עוד הרבה עמודות שאנחנו לא נתעסק איתן כרגע באפליקציה.

  16. 05:33

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

  17. 05:53

    אז הדבר הנכון יהיה לייצר קבועים שמצביעים על הדאטה הזה. אז בואו נייצר לנו כאן איזשהו public, או בואו ניקח אפילו private, אנחנו לא צריכים שהוא יהיה public, final, static, URI, כי אנחנו רוצים את ה-URI של contacts table, ונכניס לתוכו את הקבוע הזה.

  18. 06:19

    אז אנחנו יכולים לבוא ולהכניס כאן איזשהו URI parse עם המחרוזת, אבל קיימים קבועים כאלה כבר במערכת, והקבוע הראשון יקרא contacts/contacts.contacts.contents/URI וזה בדיוק מקביל למכרוזת שראינו.

  19. 06:46

    content/com.android.contacts/ המידע שלנו הוא contacts. אז במקום להשתמש במכרוזות עדיף להשתמש עם קבועים במערכת אם הם קיימים.

  20. 07:05

    הדבר הבא שאנחנו רוצים זה בואו נראה בדיוק מה עוד היה לנו שמה, היה לנו שמה את ה-ID והיה לנו את ה-displayy name אז בואו נעשה אותם. ניגש בחזרה לקבועים האלה ונשכפל את הקבוע הזה ואנחנו רוצים הפעם static string והקבוע צריך להיקרא contacts table ובתוך contacts table יש לנו קונטקט איי-די קולום זה השם של העמודה שמתארת

  21. 07:43

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

  22. 08:26

    display underline name שראינו. שוב, כל הנתונים האלה זה פשוט

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

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

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

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

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

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

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