מדריכי Android למתחילים חלק 4: ספק תוכן

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

בהדרכות Android הקודמות שלנו למתחילים, דנו בשלושת אבני הבניין הראשונות של Android: פעילות , כוונה ו שירותים . מאמר זה הוא רביעי בסדרה זו של מדריכי Android למתחילים ודן בספק תוכן, שהוא עוד מרכיב חשוב מאוד במערכת Android.



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



הדרכת Android למתחילים -4 בונוס: הורד קוד ספק תוכן כאן . אתה רוצה קוד זה לאחר שתעבור את ההדרכה! :)

[dl url = '#' class = 'eModal eModal-6 ″ title =' Code Download 'desc =' 'type =' 'align =' 'for =' download ']



מדריכי Android: ספק תוכן

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

מהו שיעור הסורקים בג'אווה

להלן מספר דוגמאות לספקי תוכן המוגדרים כברירת מחדל בממשק ה- API של מערכת Android:

מדריכי Android: ספקי תוכן ברירת מחדל במערכת אנדרואיד



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

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

לכולכם בשלב כלשהו בחיי הרשתות החברתיות שלכם, העלתם תמונה לציר הזמן שלכם בפייסבוק, נכון! איך אתה עושה את זה?

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

לאחר שקראתי את המאמרים הקודמים של סדרת הדרכות אנדרואיד , אתה יודע על פעילויות וכוונות לכן, אתה יודע שזה מה שקורה:

קיר הפייסבוק שלך הוא 'פעילות'. כשלוחצים על כפתור הצילום, מועברת 'כוונה' המעבירה את המסר ונפתח 'ספק התוכן' (גלריית התמונות). התמונה מועלה באמצעות העלאת רשת 'SERVICE'.

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

מדוע מערכת אנדרואיד זקוקה לספקי תוכן?

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

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

האם אני באמת צריך ספק תוכן?

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

2) אתה לעומת זאת צריך ספק מותאם אישית שיספק הצעות חיפוש מותאמות אישית במערכת היישומים שלך.

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

מהן הפעולות הנתמכות על ידי ספק תוכן?

ספקי תוכן תומכים בפעולות הבסיסיות הבאות:

אחד) שאילתות: שואל את ספק התוכן לכל האובייקטים, בהתבסס על ה- URI שצוין.

2) לִמְחוֹק: מוחק את האובייקטים שצוינו ממסד הנתונים של ספק תוכן.

3) עדכון: מבצע עדכונים לאובייקטים במסד הנתונים.

4) לְהַכנִיס: מכניס אובייקט חדש למסד הנתונים.

צעדים לביצוע פעולה אצל ספק תוכן

שלב 1: גישה לספק תוכן

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

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

תוכן URI

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

אחד) תָכְנִית: לתכנית של ספק תוכן יש ערך קבוע: 'תוכן'.

2) רָשׁוּת: זהו שמו הסמלי של הספק, והוא ייחודי לכל אחד. כך אנו מייחדים את ספק התוכן הרצוי מתוך רשימה של רבים כל כך.

3) נָתִיב: נָתִיב עוזר להבחין בין הנתונים הנדרשים לבין בסיס הנתונים השלם . למשל, ספק תוכן יומן השיחות מבדיל בין שיחות שלא נענו, שיחות שהתקבלו וכו 'באמצעות נתיבים שונים.

4) תְעוּדַת זֶהוּת: זה אינו מרכיב חובה, וייתכן שהוא אינו קיים ב- URI, אך אם הוא קיים, עליו להיות מספרי. לדוגמה, אם ברצונך לגשת לקובץ מוסיקה ספציפי מספק תוכן המדיה שלך, היית מציין גם מזהה .

התהליך

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

URI הם משני סוגים:

בנוסף, ל- URI יכולים להיות גם מידע מגביל.

שלב 2: כיצד לאחזר נתונים מספק תוכן

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

כל זה יישום (שרוצה לגשת למסד הנתונים הזה) צריך לעשות הוא לבקש הרשאה זו.

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

מבררים

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

להלן הטיעונים המשמשים בעת שאילתות:

אחד) שִׂנאָה : זה עובד בדיוק כפי שהוסבר לעיל.

2) הַקרָנָה: השאילתה צריכה להחזיר קבוצת עמודות מכל טבלת מסד הנתונים . זה מכונה הקרנה. העברת null תחזיר את כל העמודות, וזה לא יעיל.

3) סעיף בחירה: ל מסנן שמצהיר אילו שורות להחזיר , מעוצב כמשפט SQL WHERE (לא כולל ה- WHERE עצמו). העברת null תחזיר את כל השורות עבור ה- URI הנתון.

לדוגמא, אם תזין אלפבית (אמור 'P') בעמודת החיפוש בפנקס הכתובות שלך, הוא יחזיר את כל פרטי הקשר החל מ- 'P'. עם זאת, אם אינך מזין דבר בסרגל החיפוש, הרשימה המלאה של אנשי הקשר נשלפת (סעיף הבחירה מוגדר 'null' במקרים כאלה).

4) טיעון בחירה: אתה יכול לכלול '? S' בבחירה, אשר יוחלפו בערכים מתוך selectionArgs, לפי סדר הופעתם בבחירה.

5) סדר המיון: סעיף SQL ORDER BY (לא כולל ה- ORDER BY עצמו). העברת null תביא את התוצאות שעשויות להיות מסודרות.

דוגמת קוד לשאילתות:

  • חיפוש מספרי טלפון באנשי קשר
סמן הסמן = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = '' while (cursor.moveToNext ()) { מחרוזת columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) מזהה מחרוזת = cursor.getString (cursorIndex) שם מחרוזת = cursor.getString (סמן. GetColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) מספר מספר int = מספר. (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONT. , מחרוזת חדשה [] {id}, null) תוך (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'שם:' + שם + ', מספר טלפון:' + phoneNo + ''} phoneCursor.close ()}}}

הַכנָסָה

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

דוגמת קוד להכנסה:

  • הפעולה היא הכנסת ערך חדש בשם 'רג'ניקנט' ומספר '9988999888'
// פעולה ArrayList ops = ArrayList חדש () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContacts.ACCO.) ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone. NUM. , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

עִדכּוּן

כדי לעדכן ספק תוכן משתמשים בטיעונים הבאים:

אחד) שִׂנאָה: ה- URI של ספק התוכן

2) ערכי תוכן: זה מכיל את הערכים שיחליפו את הנתונים הקיימים.

3) סעיף בחירה: זה יכול לעזור בבחירת הרשומות הספציפיות לעדכון

להמיר אובייקט למערך PHP

4) טיעון בחירה: אתה יכול לכלול '? S' בבחירה, אשר יוחלפו בערכים מתוך selectionArgs, לפי סדר הופעתם בבחירה.

שוב, המפתחות של האובייקט ContentValues ​​חייבים להתאים לעמודות ספק התוכן אחרת, העדכון לא יתרחש.

דוגמת קוד לעדכון:

  • עדכון מספר הטלפון שבו השם הוא 'רג'ניקנט'
מחרוזת איפה = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {'Rajnikant'} ArrayList ops = ArrayList new () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (where, params) .withValue (ContactsContract.CommonDataKinds. טלפון.מספר, '9876543210') .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

מְחִיקָה

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

דוגמת קוד למחיקה:

  • מחק את איש הקשר ששמו 'רג'ניקנט'
מחרוזת איפה = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {'Rajnikant'} ArrayList ops = ArrayList new () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (where, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)

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

אנו מקווים מדריך אנדרואיד למתחילים: חלק 5 לא היה קשה מדי להבין! נדון יותר אודות ספקי תוכן בהדרכות Android לאחר מכן. תהנה ללמוד את היסודות עד אז!

האם יש לך ספק במדריך זה לאנדרואיד? שאל אותנו.

למידה שמחה!

המשאבים הבאים שימשו ליצירת הדרכה זו לאנדרואיד! מפתחי אנדרואיד רשמיים , Edureka.in

ייתכן שתאהב גם את הפוסטים הקשורים הבאים: