
name, getters ו-setters, קונסטרקטור שמקבל שם, ו-toString שמחזירה את השם.getContacts שמחזירה ArrayList<Contact>. היא שואבת קורסור של אנשי הקשר, ממלאת את הרשימה באובייקטים חדשים וסוגרת את הקורסור.content://com.android.contacts/contacts, עם העמודות _id ו-display_name.ContactsContract.Contacts.CONTENT_URI עבור ה-URI, ContactsContract.Contacts._ID ו-ContactsContract.Contacts.DISPLAY_NAME עבור העמודות. כך מגדירים קבועים פרטיים משלנו שמצביעים עליהם.getContentResolver() מהמחלקה הגלובלית MyApp, וקוראים ל-query עם ה-URI ושאר הפרמטרים (projection, where, args, sort) כ-null, כדי להביא את כל הטבלה.moveToNext, קוראים את ה-ID ואת השם ומוסיפים אובייקט Contact לרשימה. ה-ID לא בשימוש כרגע.append, כולל קו מפריד.uses-permission עם READ_CONTACTS, אחרת אין אישור לקרוא את אנשי הקשר.הטקסט המלא של הדקות הראשונות בהרצאה «Content Provider - חלק 4» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שראינו איך אנחנו יכולים לייצר קונטנט פרוביידר ולחשוף קונטנט מהאפליקציה שלנו החוצה, ואיך אנחנו יכולים לבנות אפליקציה אחרת שצורכת את הקונטנט פרוביידר, בואו נצרוך קונטנט פרוביידר אחר שקיים במכשיר.
בדוגמה הזאת אנחנו הולכים לצרוך קונטנט שלא אנחנו יוצרים וחושפים, אלא אנחנו הולכים לצרוך את רשימת הקונטקטס שקיימת אצל היוזר. זאת אפליקציה שנקראת אפליקציית הקונטקטס שכבר קיימת אצלו במכשיר, אמורה להיות, ואנחנו רוצים להשתמש בה ולצרוך ממנה את רשימת השמות של הקונטקטס של אנשי הקשר של היוזר,
כאשר אנחנו משתמשים באותה טכניקה שהשתמשנו בדיוק בכדי לצרוך קונטנט כשאנחנו חשפנו את הקונטנט. אז יש לנו כאן לחצן, יש לנו כאן טקסט-ויו, אנחנו רוצים בלחיצה על הלחצן להציג בטקסט-ויו את רשימת אנשי הקשר של היוזר.
אז מה אנחנו צריכים לעשות בשביל להצליח לבצע את זה? הדבר הראשון שאנחנו צריכים לבצע זה לגשת ולבנות מחלקה שתכיל את הקונטקטס, בואו נקרא לה פשוט קונטקט.
היא מתארת קונטקט אחד ויחיד, כלומר איש קשר אחד ויחיד, שיש ליוזר במכשיר. בואו נבנה פה private string name, זה יהיה השם של ה-contact, בואו נצרף כאן על ידי alt insert getters and setters ואיזשהו קונסטרקטור public contact שמקבל name ומבצע set name עבור ה-name, ונוסף איזושהי פונקציית toString שפשוט
מחזירה את ה-Name ונרד פה שורה שיהיה קל להציג את זה. הדבר הראשון, מה שאנחנו רואים זה מחלקה שמתארת קונטקט אחד ויחיד ופשוט מתארת את השם של הקונטקט, זה מה שאנחנו רוצים להחזיר ולהציג.
כעת אנחנו יכולים לגשת ולבנות מחלקה ייעודית שהתפקיד שלה זה לגשת לקונטנט פרוביידר של הקונטקטס במכשיר ולהביא לנו את כל הקונטקטס כאשר לכל אחד יש את השם שלו.
בואו נקרא למחלקה הזאת קונטקטס מנאג'ר. אנחנו רוצים לגשת ובמחלקה לבנות פונקציה public static שמחזירה הרייליסט של קונטקט המחלקה שבנינו. בואו נקרא לפונקציה get contacts ועל המחלקה הזאת לייצר arraylist מסוג contact, בואו נקרא ל-arraylist הזה contacts שווה new arraylist בצורה כזאת, ובסיום הפונקציה אנחנו פשוט מחזירים את כל
ה-contacts האלה. אוקיי, כל מה שאנחנו צריכים לעשות באמצע זה לכתוב את הקוד שפשוט ניגש ל-content פרוביידר במכשיר של הקונטקטס, שואב קורסור שמכיל את כל הקונטקטס, שולף משמה את כל הקונטקטס, ממלא את כל ה-raylist באובייקטים של קונטקט חדשים, מחזיר ואז אנחנו נוכל
לרוץ ולהציג אותם בממשק המשתמש שלנו. עכשיו, בשביל להצליח לעשות את זה אנחנו כמובן צריכים לדעת מה הכתובת URI של הקונטקטס במכשיר.
בנוסף, מה השמות של העמודות לדוגמה בשביל לרוץ על ידי הקורסור ולשלוף את המידע. אנחנו לא יכולים לבצע את זה מבלי לדעת את השמות האלה.
אנחנו לא יכולים לחשוב או להמציא או לנחש את השמות האלה. כל השמות של איפה זה נמצא במכשיר, מה כתובת ה-URI, מה השמות של העמודות, כל הדברים האלה חייבים להיות בדוקומנטציה של אנדרואיד או בדוקומנטציה של אותה אפליקציה שחושפת את זה.
אז אני עשיתי איזה מחקר קטן וגיליתי איך כל השמות האלה אמורים להיות וכתבתי כאן איזשהו מסמך word שמראה את אותה הטבלה בדיוק. אז קיימת כביכול איזושהי טבלה כזאת במכשיר של כל ה-contacts.
השם של ה-URI שלה זה content.com.android.contacts ולאחר מכן יש לנו /contacts זה בעצם הדאטה שאנחנו רוצים, זאת הטבלה, תזכורת זה הפרפיקס והוא תמיד צריך להיות קונטנט, זה האאוטוריטי ובהקשר שלנו זה com.android.contacts וזה הדאטה שאנחנו מחפשים וזה טבלת הקונטקטס.
הטבלה עצמה מכילה underline ID וזה ה-IDs, display underline name זה השם של העמודה שמכילה את ה-display name של הקונטקטס, כלומר מה השמות שלהם, יש לנו כאן first name ו-last name, יש פה פשוט display name, וכמובן יש פה עוד הרבה עמודות שאנחנו לא נתעסק איתן כרגע באפליקציה.
אז יש לנו כרגע בדיוק את השם של ה-URI, יש לנו כרגע את השם של העמודות ואנחנו יכולים לפי השמות האלה לגשת ולהביא את המידע. כמובן כל הידע הזה זה פשוט מחקר בדוקומנטציה של אנדרואיד ושאלות בגוגל ובסטאק אוברפלואו שמראים לנו מה השמות האלה.
אז הדבר הנכון יהיה לייצר קבועים שמצביעים על הדאטה הזה. אז בואו נייצר לנו כאן איזשהו public, או בואו ניקח אפילו private, אנחנו לא צריכים שהוא יהיה public, final, static, URI, כי אנחנו רוצים את ה-URI של contacts table, ונכניס לתוכו את הקבוע הזה.
אז אנחנו יכולים לבוא ולהכניס כאן איזשהו URI parse עם המחרוזת, אבל קיימים קבועים כאלה כבר במערכת, והקבוע הראשון יקרא contacts/contacts.contacts.contents/URI וזה בדיוק מקביל למכרוזת שראינו.
content/com.android.contacts/ המידע שלנו הוא contacts. אז במקום להשתמש במכרוזות עדיף להשתמש עם קבועים במערכת אם הם קיימים.
הדבר הבא שאנחנו רוצים זה בואו נראה בדיוק מה עוד היה לנו שמה, היה לנו שמה את ה-ID והיה לנו את ה-displayy name אז בואו נעשה אותם. ניגש בחזרה לקבועים האלה ונשכפל את הקבוע הזה ואנחנו רוצים הפעם static string והקבוע צריך להיקרא contacts table ובתוך contacts table יש לנו קונטקט איי-די קולום זה השם של העמודה שמתארת
את האיי-די והשם הזה נמצא גם כן כקבוע והוא נקרא קונטקטס קונטראקט נקודה קונטקטס ופה יש לנו נקודה אנדרליין איי-די כל המחרוזת הזאת זה בעצם המחרוזת אנדרליין איי-די שראינו בטבלה בואו נשכפל את כל זה ויש לנו קונטקט ניים או דיספליין זה יהיה שווה לנקודה display name וזה שווה למחרוזת
display underline name שראינו. שוב, כל הנתונים האלה זה פשוט