دروس Android للمبتدئين الجزء 4: موفر المحتوى



يناقش هذا البرنامج التعليمي الخاص بنظام Android مفاهيم مزود المحتوى. إنها لبنة مهمة في Android ، تسهل تبادل البيانات في نظام Android.

في دروسنا السابقة عن Android للمبتدئين ، ناقشنا اللبنات الأساسية الثلاثة الأولى لنظام Android: نشاط و نوايا و خدمات . هذه المقالة هي الرابعة في هذه السلسلة من برامج Android التعليمية للمبتدئين وتناقش موفر المحتوى ، وهو عنصر آخر مهم جدًا في نظام Android.

موفر المحتوى هو وسيط نظام Android الخاص بك ، مما يسهل تبادل البيانات بين تطبيقات Android المختلفة. دعنا ندخل قليلاً في تفاصيل ذلك في هذا البرنامج التعليمي لنظام Android.





برنامج تعليمي Android للمبتدئين - 4 مكافأة: قم بتنزيل كود مزود المحتوى هنا . قد ترغب في الحصول على هذا الرمز بمجرد الانتهاء من البرنامج التعليمي! :)

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



دروس Android: مزود المحتوى

يسهل موفر المحتوى الوصول إلى مخزن أو مستودع بيانات مركزي للسماح بمشاركة البيانات ومعالجة البيانات عبر تطبيقات مختلفة.

في ما يلي بعض الأمثلة على موفري المحتوى الافتراضيين في واجهة برمجة التطبيقات لنظام Android:

دروس Android: موفرو المحتوى الافتراضي في نظام Android



يسمح موفرو المحتوى هؤلاء للمستخدم بالتجريد من قاعدة البيانات الأساسية. بشكل عام ، يستخدم موفرو المحتوى SQLite لتخزين قاعدة البيانات الأساسية.

دعنا نأخذ المثال المفيد دائمًا لتطبيق Facebook القديم الجيد ، والذي ساعدنا في تبسيط الأمور في دروس Android السابقة أيضًا!

لقد قمت جميعًا في مرحلة ما من حياتك على الشبكات الاجتماعية بتحميل صورة على الجدول الزمني الخاص بك على Facebook ، أليس كذلك! كيف تقوم بذلك؟

عند النقر على زر الصورة على الحائط ، تصل إلى معرض الصور. من هناك يمكنك اختيار صورة لتحميلها.

بعد قراءة المقالات السابقة من سلسلة دروس Android ، فأنت تعلم عن الأنشطة والنوايا ، لذا فأنت تعلم أن هذا ما يحدث:

حائط الفيسبوك الخاص بك هو 'نشاط'. أثناء النقر فوق زر الصورة ، يتم تمرير 'القصد' ، الذي ينقل الرسالة ويفتح 'مزود المحتوى' (معرض الصور). يتم تحميل الصورة باستخدام تحميل الشبكة 'SERVICE'.

شاهد هذا الفيديو المباشر لمعرفة كيفية عمل موفر المحتوى داخل تطبيق Facebook الخاص بك.

لماذا يحتاج نظام Android إلى موفري المحتوى؟

تنشأ الحاجة إلى موفري المحتوى لأن قاعدة البيانات التي تم إنشاؤها في تطبيق واحد غير مرئية لتطبيق آخر.

من السهل إنشاء وتخزين قاعدة البيانات في تطبيقات مختلفة باستخدام SQLite ، ولكن المشكلة تكمن في هذا ، تعتبر قاعدة البيانات في Android خاصة بالتطبيق الذي ينشئها . لا توجد مساحة تخزين مشتركة في Android يمكن لكل تطبيق الوصول إليها. لذلك ، لكي تستخدم التطبيقات المختلفة قاعدة بيانات ، يحتاج نظام Android إلى واجهة تتيح تبادل البيانات بين التطبيقات وبين العمليات. هذا هو المكان الذي يأتي فيه مزود المحتوى للعب.

هل أحتاج حقًا إلى مزود محتوى؟

1) أنت لا تحتاج إلى تطوير مزود خاص بك إذا كنت تريد قاعدة بيانات خاصة لتطبيق معين (لن تكون قاعدة البيانات هذه متاحة للتطبيقات بخلاف التطبيق الذي أنشأها).

2) لكنك بحاجة إلى مزود مخصص لتقديم اقتراحات بحث مخصصة في نظام التطبيق الخاص بك.

3) ستحتاج أيضًا إلى مزود محتوى لنسخ ولصق البيانات المعقدة من تطبيقك إلى تطبيقات أخرى.

ما هي العمليات التي يدعمها مزود المحتوى؟

يدعم موفرو المحتوى العمليات الأساسية التالية:

واحد) الاستعلام: يستعلم عن موفر المحتوى لجميع الكائنات ، بناءً على URI المحدد.

2) حذف: يحذف الكائنات المحددة من قاعدة بيانات موفر المحتوى.

3) تحديث: يقوم بإجراء تحديثات على الكائنات الموجودة في قاعدة البيانات.

4) إدراج: إدراج كائن جديد في قاعدة البيانات.

خطوات تنفيذ عملية في مزود المحتوى

الخطوة 1: الوصول إلى مزود المحتوى

كائن عميل ContentResolver يستخدم للوصول إلى البيانات من مزود المحتوى. يتواصل مع كائن الموفر ، والذي بدوره يقبل طلب الوصول إلى البيانات ويعيد النتائج المرجوة. تسمح واجهة تبادل البيانات التي يوفرها الموفر وكائن عميل المزود بالاتصال عبر عمليات / تطبيقات مختلفة.

يجب أن يعلن التطبيق الذي يحتاج إلى الوصول إلى قاعدة البيانات عن ذلك ويطلب الأذونات في ملف البيان الخاص به. ستتم مناقشة هذا بالتفصيل في برامج Android التعليمية اللاحقة.

URI للمحتوى

يعد Content URI أحد الوسائط المستخدمة لتحديد البيانات في الموفر. تتكون من أربعة أجزاء:

واحد) المخطط: مخطط مزود المحتوى له قيمة ثابتة: 'المحتوى'.

2) السلطة: إنه الاسم الرمزي للمزود ، وهو فريد لكل واحد. هذه هي الطريقة التي نفرد بها موفر المحتوى المطلوب من قائمة الكثيرين.

3) مسار: مسار يساعد في تمييز البيانات المطلوبة من قاعدة البيانات الكاملة . على سبيل المثال ، يميز موفر محتوى سجل المكالمات بين المكالمات الفائتة والمكالمات المستلمة وما إلى ذلك باستخدام مسارات مختلفة.

4) هوية شخصية: إنه ليس مكونًا إلزاميًا ، وقد لا يكون موجودًا في URI ولكن إذا كان موجودًا ، فيجب أن يكون رقميًا. على سبيل المثال، إذا كنت ترغب في الوصول إلى ملف موسيقى معين من موفر محتوى الوسائط الخاص بك ، فيمكنك تحديد معرف أيضًا .

العملية

باستخدام سلطة الموفر ، يحدد ContentResolver موفر المحتوى الصحيح (حيث أن السلطة فريدة لكل مزود محتوى). بعد القيام بذلك ، يتم استخدام مكون مسار URI لتحديد جدول البيانات الصحيح (المطلوب). في حالة وجود المعرف ، سيعرف المزود البيانات الدقيقة المطلوبة.

URI من نوعين:

بالإضافة إلى ذلك ، يمكن أن تحتوي URIs على معلومات محدودة أيضًا.

الخطوة 2: كيفية استرداد البيانات من مزود المحتوى

على الرغم من أن ContentResolver لديه حق الوصول إلى جدول البيانات الآن ، فإنه لا يمكنه استرداد البيانات المطلوبة ما لم يكن لدى التطبيق 'قراءة إذن الوصول' لهذا المزود المحدد. يتم تحديد هذا الإذن في ملف البيان الخاص بكل مزود محتوى.

كل هذا تطبيق (الذي يريد الوصول إلى قاعدة البيانات هذه) ما يجب القيام به هو طلب هذا الإذن.

الآن كما تمت مناقشته سابقًا في هذا البرنامج التعليمي لنظام Android ، يمكن إجراء أربع عمليات باستخدام مزود المحتوى . سنستعرض كل واحد تلو الآخر.

الاستعلام

الآن ، لقد قمت بالوصول إلى المزود ، ولديك إذن لاسترداد البيانات منه. الخطوة التالية هي إنشاء الاستعلام لطلب الإجراء المطلوب من الموفر .

فيما يلي الوسائط المستخدمة أثناء الاستعلام:

واحد) اكرهه : يعمل تمامًا كما هو موضح أعلاه.

2) تنبؤ: يجب أن يكون الاستعلام إرجاع مجموعة من الأعمدة من جدول قاعدة البيانات بأكمله . يُعرف هذا باسم الإسقاط. سيؤدي تمرير القيمة الخالية إلى إرجاع جميع الأعمدة ، وهو أمر غير فعال.

3) شرط الاختيار: إلى مرشح يعلن عن الصفوف المراد إرجاعها ، بتنسيق جملة SQL WHERE (باستثناء WHERE نفسه). سيؤدي تمرير القيمة الفارغة إلى إرجاع جميع الصفوف لمعرف URI المحدد.

على سبيل المثال ، إذا أدخلت أبجديًا (مثل 'P') في عمود البحث في دفتر العناوين الخاص بك ، فسيعرض كل تفاصيل الاتصال بدءًا من 'P'. ومع ذلك ، إذا لم تدخل أي شيء في شريط البحث ، فسيتم استرداد القائمة الكاملة لجهات الاتصال (يتم تعيين عبارة التحديد على 'فارغة' في مثل هذه الحالات).

4) وسيطة الاختيار: يمكنك تضمين '؟ s' في التحديد ، والتي سيتم استبدالها بالقيم من selectArgs ، بالترتيب الذي تظهر به في التحديد.

5) امر ترتيب: عبارة SQL ORDER BY (باستثناء ORDER BY نفسه). سيؤدي تمرير القيمة الفارغة إلى جلب النتائج التي قد تكون غير مرتبة.

مثال الرمز للاستعلام:

  • البحث عن أرقام الهواتف في جهات الاتصال
Cursor cursor = contentresolver.query (ContactsContract.Contacts.CONTENT_URI، null، null، null، null) int count = cursor.getCount () if (count> 0) {String contactDetails = '' while (cursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) String name = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) إذا كان (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI، null، CommonDataKinds.Phone.CONT؟ ، سلسلة جديدة [] {id} ، فارغة) أثناء (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'الاسم:' + الاسم + '، رقم الهاتف:' + phoneNo + ''} phoneCursor.close ()}}}

إدراج

لنفترض أنك تريد إدراج جهات اتصال جديدة في دفتر العناوين الخاص بك. كائن ContentValues يستخدم للقيام بهذه الإدخالات. يجب أن تتطابق مفاتيح كائن ContentValue وأعمدة موفر المحتوى لتحقيق ذلك. إليك مثال على ذلك:

مثال رمز للإدراج:

  • تتمثل العملية في إدخال إدخال جديد باسم 'Rajnikant' ورقم '9988999888'
// عملية ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE، null) .withValue (RawContacts.ACbu) ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI). withValueBackReference (Data.RAW_CONTACT_ID، rawContactInsertIndex) .withValue (Data.MIMETYPE، StructuredName.CONTENT_ITEM_TYPE). ”Structured_NAME. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI). withValueBackReference (Data.RAW_CONTACT_ID، rawContactInsertIndex). withValue (Data. ، Phone.TYPE_MOBILE) .build ()) getContentResolver (). applicationBatch (ContactsContract.AUTHORITY، ops)

التحديث

لتحديث موفر المحتوى ، يتم استخدام الوسائط التالية:

واحد) اكرهه: URI لموفر المحتوى

2) قيم المحتوى: يحتوي هذا على القيم التي من شأنها أن تحل محل البيانات الموجودة.

إيجابيات وسلبيات القرصنة

3) شرط الاختيار: يمكن أن يساعد هذا في تحديد السجلات المحددة لتحديثها

4) وسيطة الاختيار: يمكنك تضمين '؟ s' في التحديد ، والتي سيتم استبدالها بالقيم من selectArgs ، بالترتيب الذي تظهر به في التحديد.

مرة أخرى ، فإن يجب أن تتطابق مفاتيح كائن ContentValues ​​مع الأعمدة في موفر المحتوى خلاف ذلك ، لن يحدث التحديث.

مثال رمز للتحديث:

  • تحديث رقم الهاتف حيث الاسم 'Rajnikant'
String حيث = ContactsContract.Data.DISPLAY_NAME + '=؟ 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI). withSelection (where، params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER، “9876543210”) .build ()) getContentResolver (). applyBatch (ContactsContract.AUTHORITY، ops)

حذف

يستخدم الحذف نفس الوسيطات مثل التحديث باستثناء وسيطة ContentValues ​​، وهو أمر غير مطلوب حيث لن تكون هناك أي قيم بديلة.

مثال على الرمز للحذف:

  • حذف جهة الاتصال التي يكون اسمها 'Rajnikant'
String حيث = ContactsContract.Data.DISPLAY_NAME + '=؟ 'String [] params = سلسلة جديدة [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (where، params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY ، العمليات)

في حالة عملية الإدراج ، يجب أن يكون URI مستندًا إلى الدليل. في جميع الحالات الأخرى ، يمكن أن تكون عناوين URL إما قائمة على المعرف أو تستند إلى الدليل.

إننا نأمل برنامج Android التعليمي للمبتدئين: الجزء 5 لم يكن من الصعب فهمه! سنناقش المزيد حول موفري المحتوى في برامج Android التعليمية اللاحقة. استمتع بتعلم الأساسيات حتى ذلك الحين!

هل لديك أي شكوك في هذا البرنامج التعليمي لنظام Android؟ اسألنا.

تعلم سعيد!

تم استخدام الموارد التالية في إنشاء هذا البرنامج التعليمي لنظام Android! مطورو Android الرسميين و Edureka.in

قد تعجبك أيضًا هذه المنشورات ذات الصلة: