آموزش اندروید فصل چهارم قسمت چهارم – Content Provider

آموزش برنامه نویسی اندروید فصل چهارم

در قسمت چهارم آموزش اندروید مبحث Content Provider ها یا تامین کننده محتوی را آموزش میدهیم.اگر بخواهیم تعریف کوتاهی برای این مبحث در نظر بگیریم  میتوان گفت مانند یک پایگاه داده است که میتوان اطلاعات یک برنامه را درآنجا متمرکز کرده و چهار عمل اصلی را برروی آن انجام داد.

آموزش اندروید فصل چهارم قسمت چهارم – Content Provider

توجه : برای مشاهده تصاویر در سایز اصلی برروی آنها کلیک کنید.

تامین کننده محتوی (Content Provider)

مبحث دیگر در بانک اطلاعاتی نحوه به اشتراک گذاری اطلاعات است چون تنها برنامه ای که بانک را ایجاد کرده اجازه دسترسی به بانک را دارد. به همین دلیل برنامه نویسان از تکنیکی به نام تامین کننده محتوی استفاده میکنند.میتوان گفت تامین کننده محتوی درواقع شبیه به یک منبع اطلاعاتی است و ذخیره سازی اطلاعات ربطی به نحوه استفاده و استفاده کننده ندارد.

چیزی که اینجا اهمیت پیدا میکند نحوه دسترسی برنامه های مختلف به تامین کننده محتوی است.تامین کننده محتوی شباهت زیادی به بانک اطلاعاتی دارد چرا که میتوان از آن اطلاعات را دریافت وحتی اقداماتی چون ویرایش و حذف و اضافه را نیز انجام داد.

اندروید خود دارای چندین تامین کننده محتوی پیش فرض میباشد مانند:

  • Browser : اطلاعاتی از قبیل بوکمارک و تاریخچه و .. را نگهداری میکند.
  • CallLog : اطلااعات تماس را نگهداری میکند.
  • Contacts : اطلاعات مخاطبین را نگهداری میکند.
  • MediaStore : حاوی اطلاعات چندرسانه ای است.
  • Setting : تنظیمات سیستم را نگهداری میکند.

علاوه بر تامین کننده های خود اندروید میتوانید خود یک تامین کننده ایجاد کنید.

نحوه فراخوانی یا آدرس دهی نیز بسیار مهم است که به صورت زیر نوشته میشود

<standard_prefix>://<authority>/<data_path>/<id>

  • Standard_prefix : برای استعلام گیری از یک تامین کننده محتوی همیشه مقدار ثابت content:// را دارد.
  • Authority : نام تامین کننده میباشد برای مثال هنگام استعلام از تامین کننده های توکار مثل مخاطبین این بخش مقدار contacts را میگیرد و هنگام استعلام از تامین کننده هایی که توسط برنامه نویس ایجاد شده باید نام کامل آنرا مانند tejariapp.provider را تعیین کرد.
  • Data_path : نوع اطلاعاتی است که درخواست میدهید برای مثال اگر قصد درارید اطلاعات مخاطبین را دریافت کنید تنها کافی است عبارت people را استفاده کنید.
  • Id : این بخش نیز مشخص کننده رکورد درخواستی شماست. برای مثال اگر بدنبال مخاطب دوم هستید کافی است عدد ۲ را وارد کنید و نتیجه چیزی شبیه به content://contacts/people/2 خواهد بود.

مثالی از تامین کننده محتوی مخاطبین

پروژه جدیدی با نام دلخواه ایجاد میکنیم و در فایل xml آن تنها یک TextView به صورت زیر ایجاد میکنیم

حال در فایل جاوا برنامه نیز چنین کدنویسی میکنیم

دستورات فایل جاوا را اگربخواهیم قابل فهم تر کنیم میتوان گفت در onCreate برنامه که هنگام ایجاد برنامه فراخوانی میشود متد fetchconacts راصدا زدیم و خارج از بلاک onCreate آن را تعریف کرده ایم.

درون این متد ابتدا دو متغیر phonenum و email را تعریف میکنیم که در ادامه برای مقداردهی شماره و ایمیلی که از conacts استخراج میشود استفاده خواهیم کرد. وهمچنین شی CONTACT_URI که آدرس Contacts را درون خود جا داده ب استفاده از ثابت های از پیش تعریف شده نکته قابل توجه این است که عبارت ContactsContract.Contacts.CONTENT_URI برابر با مقدار content://contacts/people است اما در اندروید ۲ به بعد از ثابت ها بجای آدرس دهی دستی استفاده میشود. مقدار CONTACT_URI از نوع URI است چون در واقع یک آدرس Uri را برمیگرداند در حالی که مقادیر ID , DISPLAY_NAME , HAS_PHONE_NUM چون مقادیر شماره و نام و ای دی را برمیگردانند از نوع رشته ای است.    

*برای تامین کننده های توکار دیگر نیز به صورت زیر مینویسیم

  • BOOKMARKS_URI
  • CONTENT_URI
  • Images.Media.EXTERNAL_CONTENT_URI
  • CONTENT_URI

در ادامه برای شماره تلفن و ایمیل نیز به همین صورت متغیر هارا تعریف میکنیم.

سپس Buffer و CuntentResolver را بصورت زیر تعریف میکنیم.Buffer همانطور که قبلا بارها درباره اش گفته ایم به عنوان ظرفی برای نگهداری نتایج عمل میکند تا در انتها این نتایج را در محلی نمایش دهد.ContentResolver نیز میتوان گفت اجرا کننده ContentProvider ها میباشد و دستورات را بااستفاده از متد query این شی به تامین کننده محتوی اعمال میکنیم.

Cursor یا اشاره گر نیز شامل نتیجه کوری خواهد بود. شکل کلی متد query بصورت زیر است

query(uri, projection, selection, selectionArgs, sortOrder)

پارامترهای این متد نیز به شرح زیر است :

Uri : مقدار URI مربوط به دستورات است.

Projection : مشخص کننده ستون هایی است که باید استخراج شود.

Selection , selectionArgs : با استفاده از این دو آرگومان میتوان از دستور where استفاده کرد و شرطی لحاظ کرد و selectionArgs نیز مقداری است که در شرط باید در نظر گرفته شود.

setOrder :آخرین آرگومان نیز مربوط به مرتب سازی است.

سپس مقدار cursor را چک میکند و درصورتی که مخاطبی وجود داشت بااستفاده از دستور while تازمانی که به انتها مخاطبین برسد مقادیر ای دی و نام و شماره را درون متغیر ها قرار میدهد.

و در ادامه اگر تعداد شماره موبایل ها بیش از ۰ بود آنگاه مقدار نام ثبت شده را درون متغیر buffer قرار میدهد و با استفاده از یک کوری دیگر که اینبار Uri مروبط به Phone و شرطی که براساس contact_id اداره میشود مقادیر شماره تلفن های مربوط به هرای دی را استخراج کرده و درون متغیر phonecr قرار میدهد در ادامه با شرط while شماره تلفن های هر آیدی را در شی بافر قرار میدهد.

برای آیتم ایمیل نیز به همین صورت کدنویسی میکنیم  و در انتها نیز شی بافر را درون TextView خود قرار میدهیم.

 

حال وارد شبیه ساز خود شده و ابتدا چند contact وارد دستگاه کنید سپس برنامه را اجرا کنید و نتیجه را به صورت زیر ببینید

آموزش اندروید فصل چهارم-قسمت چهارم

مدرس : خانم مهندس داودی نژاد

آموزش اندروید فصل چهارم قسمت سوم

آموزش اندروید فصل چهارم قسمت پنجم

درباره نویسنده

مطالب مرتبط

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *