EN

Search
Close this search box.

موستانگ، وحشیِ دوست داشتنی

معرفی Content Provider

در درس قبل، با ضرورت ذخیره داده ها در پایگاه داده اندروید آشنا شدید و دیدید که با این کار می توانیم بدون نیاز به اینترنت، پیش بینی های هواشناسی را به کاربر نمایش دهیم و sunshine را سریعتر کنیم. همچنین، یاد گرفتید که برای این منظور باید ابتدا یک قرارداد یا contract بنویسیم و شکل و شمایلی که می خواهیم جداولمان داشته باشند را مشخص کنیم. سپس با کمک کلاس SQLiteOpenHelper، توانستیم پایگاه داده خود را بسازیم. در این درس، موستانگ به معرفی مرحله سوم یعنی تولید کننده محتوا یا Content Provider در اندروید می پردازد. پس در ادامه با ما همراه باشید.

 

مرحله سوم: Content Provider یا تولید کننده محتوا

"مفهوم

خب، تا به اینجا ما توانستیم پایگاه داده مان را بسازیم و توابعی که برای ذخیره و بازیابی داده ها نیاز داشتیم را هم تعریف کردیم. حالا شاید با خود بگویید:

 

اصلاً content provider چیست و چرا باید پیاده سازی اش کرد؟

اگر اپلیکیشن اندرویدی ما بخواهد با اپلیکیشن های دیگر تعامل داشته باشد و آن ها بخواهند به داده های پایگاه داده ما دسترسی داشته باشند، یک content provider به دردمان می خورد! در واقع، یک تولید کننده محتوا، میان لایه پایگاه داده و برنامه های دیگر قرار می گیرد و آن برنامه ها دیگر لزومی به دانستن جزئیات پیاده سازی پایگاه داده را نداشته و می توانند راحت تر و بهتر با اپلیکیشنمان تعامل داشته باشند. برنامه هایی نظیر contact و calender ، که احتمالاً بصورت پیشفرض بر روی گوشی خود نصب دارید، از این معماری تبعیت می کنند.

[*] در اینصورت، هر برنامه ای که بخواهد از ما داده بگیرد یا به ما داده بدهد، کافی است تا تنها یک دستور بدهد و یک خروجی دریافت کند، بدون اینکه نگران نحوه پیاده سازی پایگاه داده ما باشد.

اما حتماً به این فکر می کنید که sunshine که اصلا تعاملی با اپلیکیشن های دیگر ندارد، پس چه لزومی به تولید کننده محتوا است؟!

در پاسخ به این سوال هم باید گفت که: ایده جداسازی لایه داده در یک اپلیکیشن بسیار مهم است و یک تمرین خوب برنامه نویسی است. زیرا درست است که ما پایگاه داده مان را بر مبنای SQLite نوشتیم، اما اگر زمانی بخواهیم نظرمان را عوض کرده و از تکنولوژی دیگری استفاده کنیم چه؟ در اینصورت، دیگر به راحتی می توانیم فقط لایه داده را ویرایش کرده و لایه های دیگر را درگیر نکنیم (چون از قبل content provider تعریف کردیم). برنامه نویسان بخش های مختلف اپلیکیشن نیز لزومی به کند و کاو در لایه داده نخواهند داشت.

همچنین برای ارسال و دریافت داده به ویجت ها و همین طور ارسال و دریافت نتایج جستجو، یک content provider کارمان را آسان تر می کند.

 content provider یا تولید کننده محتوا در اندروید - موستانگ
content provider یا تولید کننده محتوا – موستانگ

 

تولید کننده های محتوا ، 4 کار اصلی را روی داده انجام می دهند: CRUD (یعنی: create, read, update, delete: ساختن، خواندن، بروزرسانی و حذف). این داده می تواند ردیفی در پایگاه داده باشد یا عکسی روی گوشی شما و یا حتی ویدئویی در اینترنت.

 

چطور یک تولید کننده محتوا بسازیم؟

برای اینکه یک content provider بسازیم، باید مراحل زیر را طی کنیم:

1- مشخص کردن URI

URI مخفف عبارت Universal Resource Identifier است. همان طور که از نامش پیداست، یک URI برای آدرس دهی یک منبع (مثلاً ردیف یا ردیف هایی در پایگاه داده) استفاده می شود. URL یا آدرسی که برای دسترسی به یک سایت استفاده می کنید، نوعی از URI است. تصویر زیر، ساختار یک URI را نشان می دهد:

 content provider یا تولید کننده محتوا در اندروید - موستانگ
ساختار URI – موستانگ

 

  • Scheme: نشان دهنده پروتکل مورد استفاده است. برای یک تولید کننده محتوا، مقدار آن حتماً باید content باشد (برای منبعی در وب، می تواند http یا https یا ftp باشد).
  • Authority: آدرس منحصر بفردی است که مکان content provider را مشخص می کند (باید همیشه برابر نام پکیج برنامه باشد).
  • Location: به جدولی از پایگاه داده اشاره می کند.
  • Query: آیدی محتوایی که می خواهید به آن دسترسی داشته باشید را مشخص می کند (انتخابی است).

برای اینکه داده های هواشناسی یک منطقه را درخواست کنیم، باید ابتدا URI آن را بسازیم. مثلاً: URI بالا، داده های هواشناسی برای منطقه ای با شماره آیدی 85756 را بر می گرداند.

 

2- به روزرسانی Contract

همان طور که گفتیم، Contract قراردادی بین مدل داده، رابط کاربر و پایگاه داده اندروید است که نحوه ذخیره سازی داده را نمایش می دهد. علاوه بر اینکه جداول پایگاه داده را در آن تعریف می کنیم، contract مکان مناسبی برای تعریف URI هایی است که می خواهیم در طول برنامه استفاده کنیم.

تولید کننده محتوا در اندروید - موستانگ
تعریف URI ها در قرارداد – موستانگ

 

3- پر کردن URIMatcher

به منظور ساده سازی، ما به هر URI یک عدد صحیح نسبت می دهیم. یعنی در content provider، به ازای هر IRI، یک عدد تعریف می کنیم (در تصویر بالا می توانید مشاهده کنید). بنابرین، هر زمان که به تولید کننده محتوا یک URI داده شود، وظیفه URIMatcher، پیدا کردن عدد مرتبط با آن است. با این روش، راحت تر می توان URI ها را بررسی کرده و دستور لازم آن ها را انجام داد.

[*] دقت کنید که قبل از تعریف کلاس content provider خود، باید آن را در فایل AndroidManifest.xml (اندروید مانیفست) ثبت نام کنید (همانند تصویر زیر):

 content provider یا تولید کننده محتوا در اندروید - موستانگ
ثبت نام content provider – موستانگ

 

4- پیاده سازی توابع content provider

در مرحله آخر، باید توابع زیر را در content provider پیاده سازی کنیم:

  • onCreate: در این تابع، نمونه ای از کلاس SQLiteOpenHelper می سازیم که با پایگاه داده کار می کند.
  • getType: نوع داده هایی که تولید کننده محتوا برمی گرداند را مشخص می کند: مثلا سطر یا سطرهایی از یک جدول (این مقدار می تواند حتی یک عکس هم باشد).
  • query: یک URI را گرفته و سطر یا سطرهایی که با دستور مطابقت داشته باشند را بر می گرداند.
  • insert: یک URI را گرفته و سطرهایی را به پایگاه داده اضافه می کند.
  • update: یک URI را گرفته و سطرهایی از پایگاه داده را بروز رسانی می کند.
  • delete: یک URI را گرفته و سطرهایی از پایگاه داده را حذف می کند.
 

 

در نهایت

[*] در این درس، با تولید کننده های محتوا و نحوه پیاده سازی آن ها در اندروید آشنا شدید. با موستانگ در درس آینده همراه باشید تا بپردازیم به Loaders.

[*] سوالات و نظرات خود را می توانید در پایین این نوشته و در قسمت دیدگاه ها ثبت کنید. همچنین، در این قسمت از مانژ می توانید نمونه کدهایی از این درس را مشاهده کرده و سوالات اندروید خود را نیز قرار دهید. تیم متخصصان برنامه نویسی موستانگ ، پاسخگوی شما خواهند بود.

 

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

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