
Uri.parse עם content:// ואחריו ה-authority, כלומר שם החבילה ושם המחלקה ProductsContentProvider. אפשר להוסיף /products או ID, אבל הספק שנבנה לא מתייחס לסיומת הזאת.getContentResolver(), שמאתר במכשיר את הספק לפי ה-URI. עליו יש את query, insert, update ו-delete, ובדוגמה משתמשים רק ב-query.null.null (ספק לא קיים או URI שגוי), מציגים Toast עם "No such content provider" ויוצאים עם return.getColumnIndex לעמודות _id, name ו-price, רצים בלולאה עם moveToNext, קוראים עם getInt, getString ו-getDouble, ומוסיפים לטקסט עם append ועם ירידת שורה.הטקסט המלא של הדקות הראשונות בהרצאה «Content Provider - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שבסרטון הקודם בנינו Content Provider שחושף את טבלת המוצרים, אנחנו הולכים בסרטון הזה לצרוך את המידע ולהציג אותו.
יש לנו כאן Layout, יש לנו לחצן שבדחיצה עליו אנחנו רוצים לגשת ולהביא את המידע, יש לנו כאן Text View שבו אנחנו הולכים להציג את המידע, ושימו לב רק שאנחנו נמצאים בכלל באפליקציה אחרת וחדשה לגמרי.
האפליקציה הקודמת נמצאת כאן במכשיר, אנחנו יכולים לראות אותה, אבל אנחנו נמצאים באפליקציה חדשה והפאקג' חייב להיות פאקג' אחר, שימו לב שהוא נקרא com.practic.u מפני שאם זה היה אותו הפאקג' בדיוק אז לא היינו יכולים ששתי האפליקציות האלה ירוצו על אותו המכשיר אלא בהרצה של האפליקציה הזאת היינו דורסים את האפליקציה הקודמת.
אז יש לנו פה איזשהו צ'יינג' הפאקג' name הוא אחר ואנחנו עכשיו יכולים להריץ את האפליקציה הזאת, ללחוץ על הלחצן ולצרוך את המידע של ה-content provider של האפליקציה הקודמת שבנינו.
אז מה אנחנו צריכים לעשות בלחצן? הדבר הראשון שאנחנו צריכים לעשות זה להגדיר את ה-URI. ה-URI, כמו שראינו, מגדיר את המיקום של ה-content, איפה ה-content בדיוק נמצא ועל ידי איזו מחרוזת הוא מתואר במכשיר.
אז בואו נבצע בדיוק את התיאור שלו, זה יהיה URI Parse, יש לנו פה content.com.practicu. והיה לנו את השם של המחלקה שהייתה product.content.provider.
כל זה זה היה השם של ה-content.provider. אחרי שהגדרנו את המיקום של ה-content ואני מזכיר לכם שזה בעצם ה- prefix זה ה-authority, כל זה האוטוריטי שמתארת את ה-content provider עצמו.
יכלנו להוסיף כאן /products, זה גם היה בסדר, אבל כרגע ה-content provider לא מתעסק עם הסיומת הזאת של ה-products, ואם היינו רוצים איזשהו מוצר ספציפי, נניח מוצר מספר 5, אז היינו רושמים פה את ה-ID שלו, אבל שוב ה-content provider שבנינו לא מתייחס לדברים האלה.
רק תזכורת שאם הוא כן היה מתייחס אליהם, אז ככה היינו יכולים להגדיר את זה. ומה שאנחנו רוצים לעשות זה לבנות אובייקט מטיפוס content resolver שהתפקיד שלו זה לאתר בתוך המכשיר את ה-content provider המתאים לפי ה-URI.
אז בואו בעצם נבנה אובייקט ואנחנו לא יוצרים אובייקט חדש אנחנו קוראים לפונקציה שנקראת get content resolver והנה יש לנו את האובייקט. ומפה אנחנו פשוט יכולים לקרוא ל-content resolver, והנה יש לנו את הפונקציה query, הנה יש לנו את הפונקציה insert אם אנחנו רוצים, הנה יש לנו את הפונקציה update,
הנה יש לנו את הפונקציה delete, וכך אנחנו יכולים לקרוא לכל אחת מארבעת הפונקציות שבנינו ב-content provider. אנחנו בדוגמה הזאת רוצים רק לקרוא ל-query, לראות שהכל עובד כמו שצריך, אנחנו נותנים לה את ה-URI, ואם יש לנו את הפרמטרים הנוספים, שהפונקציה מצפה לקבל, הפרוג'קשן זה אומר אילו
עמודות אנחנו רוצים להחזיר, אולי אנחנו לא רוצים את כל העמודות של הטבלה אלא רק חלק, האם יש לנו סלקשן מסוים, כלומר אזור ה-Ware שבו אנחנו רוצים להביא את המידע, נניח רק אם המוצרים הם יקרים יותר מ-100, איזה פרמטרים יש ל-Ware, לדוגמה אם היינו רושמים שהמוצרים נניח פרייס גדול מסימן שאלה, אז כאן היינו רושמים את המאה עבור סימן השאלה
והאם אנחנו רוצים למיין את זה לפי איזושהי עמודה. כל הסיפור הזה כרגע לא נתמך באפליקציות של ה-content provider שבנינו ולכן אנחנו אין לנו מה להתעסק עם זה כרגע אז אנחנו פשוט נתאר נאלים.
הפונקציה הזאת מחזירה לנו קורסור אז הנה יש לנו פה את הקורסור ואנחנו יודעים שהוא מחזיר לנו מוצרים אז בואו נקרא לזה product קורסור וקיבלנו בחזרה את הקורסור שמכיל את כל המוצרים עכשיו יכול להיות שני מקרים יכול להיות שמאיזושהי סיבה הדאטה בייס יחזיר לנו נעל ויכול להיות שטעינו ולא לא תיארנו קונטנט פרוביידר אמיתי
שקיים במכשיר נניח טעינו כאן ונתנו איזה קונטנט פרוביידר אחר שלא קיים או טעינו בפאקג' במידה ויש איזושהי שגיאה כזאת, אז מוחזר לנו נעל עבור הקורסור.
אז בואו נבצע פה איזושהי בדיקה, האם פרודקט קורסור שווה לנעל.