Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Android SDK
Code

چگونه به وسیله Android Parcelable داده را بین اکتیویتی ها منتقل کنیم

by
Difficulty:BeginnerLength:ShortLanguages:

Persian (پارسی) translation by Erfan Rezaeimehr (you can also view the original English article)

مقدمه

خیلی اوقات ما نیاز داریم که داده را بین اکتیویتی های یک اپلیکیشن اندرویدی انتقال بدهیم. یک روش راحت برای انجام این کار Intent.putExtra() هست، اما اگر شما داده ی ساخت یافته زیادی برای انتقال داشته باشید، شاید راه حل بهتر استفاده از Parcelable باشد. در این مقاله به شما نشان میدهم که چگونه Parcelable کار را برای serialize کردن کلاس ها برای به اشتراک گذاشتن بین اکتیویتی ها ساده میکند.

چرا Parcelable ؟

Parcelable یک کلاس رابط ( اینترفیس ) هست، که فقط برای اندروید نوشته شده است. به توسعه دهندگان این امکان را میدهد که یک کلاس را serialize کنند بنابراین تمام خواص آن کلاس به راحتی میتوانند از یک اکتیویتی به اکتیویتی دیگر انتقال پیدا کنند. این کار به وسیله خواندن و نوشتن از روی شی ( آبجکت ) های Parcels انجام میشود ،که میتوان داده های خام داخل  message containers را شامل بشود.

ساختن Main Activity و Layout

main Activity ما مجموعه ای از جزئیات کتاب را کنترل و مدیریت میکند. بیاید با راه اندازی مِتُِد OnCreate شروع کنیم.

بعد، activity_main.xml را برای راه اندازی view's layout و نمایش آن باز کنید. شما به دو فیلد ورودی متنی و یک دکمه برای ارسال آنها نیاز دارید.

باید چیزی شبیه به این باشه:

حالا main Activity را باز کنید و فیلد های ویو را به اکتیویتی تان متصل کنید. باید این کار را در داخل مِتُِد onCreate() تان انجام بدهید. شبیه به این:

برای این که کارِ MainActivity را تمام کنید، به راه اندازی OnClickListener نیاز دارید. این مِتُد زمانی که دکمه Submit فشار داده شود، اجرا میشود. وقتی که این اتفاق بی افتد، جزئیات وارد شده جمع آوری شده و به اکتیویتی بعدی ارسال میشوند.

در این قسمت، شما برای نمونهِ Button که از Activity layout بدست آوردید یک متد onClickListener اضافه میکنید، این کد زمانی که Submit Button ( دکمه ارسال ) کلیک بشود اجرا خواهد شد.

به این موضوع توجه کنید که ما به راحتی نمونه کلاس Book را به putExtra() انتقال میدهیم. همانطور که جلوتر مشاهده میکنید، Parcelable کار serializing کردن دادهِ book را به رشته ی string بر عهده میگیرد، بنابراین به این صورت میتواند به وسیلهِ intent منتقل بشود.

حالا که main Activity کامل شده است، ما نیاز داریم که BookActivity و همچنین کلاس Book مان را برای نگهداریِ اطلاعات کتاب بسازیم.

ساختن کلاس Book

بیاید یک کلاس Book برای نگهداری اطلاعات هر کتاب بسازیم.

این کلاس به پیاده سازی ( ایمپلمنت ) کردنِ Parcelable نیاز دارد. این کار انتقال داده از mainActivity به BookActivity را فراهم میکند.

همچنین ما چندین تابع استانداردِ دریافت کننده ( getter ) و یک تابع سازنده ( constructor ) برای ساختن سریع یک نمونه از کلاس اضافه میکنیم.

Write to the Parcel

مِتُدِ writeToParcel جایی هست که شما تمام داده های کلاس تان را در parcel اضافه میکنید. این کار در زمان آماده سازی برای منتقل شدن انجام میشود. این متد یک نمونه از Parcel را منتقل میکند که یک تعدادی از مِتُدهای وارد کردن را که شما میتوانید برای اضافه کردن هر فیلد از parcel از آنها استفاده کنید را دارد. مراقب باشید: ترتیبی که شما داده ها را وارد میکنید مهم است.

می توانید نحوه انجام این کار را اینجا ملاحظه کنید.

خواندن اطلاعات برگشت داده شده از Parcel

همانطور که مِتُدِ write وارد کردن داده را برای اینکه منتقل بشوند را کنترل و مدیریت کرد، از سازنده ( constructor ) برای خواندن داده های انتقال داده شده از serialized parcel، استفاده میشود. این مِتُد در زمان دریافت کردن اکتیویتی برای جمع آوری داده ها صدا زده میشود.

کدهایتان باید چیزی شبیه به این باشد:

اکتیویتی دریافت کننده، داده ها را به عنوان یک رشته ی استرینگی میگیرد، و سپس مِتُدِ  getParcelableExtra را برای شروع پردازشِ جمع آوری داده ها صدا میزند. این کار سازنده یی که ما در بالا مشخص کردیم را برای deserialize کردن داده و ساختن نمونه ی جدید از کلاس Book به کار می اندازد.

Parcelable.Creator

برای کامل کردن کلاس Parcelable، ما نیاز داریم نمونه Parcelable.Creator را بسازیم و آن را به فیلد CREATOR اختصاص بدهیم. The Parcelable API زمانی که نیاز به deserialize کردن یک نمونه از کلاس ما که به یک کامپوننت دیگر منتقل شده، را دارد به دنبال این فیلد میگردد.

این همه چیز را با هم مرتبط می کند. کارش ساده است، نمونه هایی از کلاس Parcelable شما را از یک Parcel با استفاده از داده های ارائه شده تولید میکند. creator، سازنده ( constructor ) ای را که شما در بالا مشخص کردید را صدا میزند، یک شی Parcel را منتقل میکند، و سازنده attributes های کلاس را مقدار دهی اولیه میکند.

اگر کلاس Parcelable  مان، کلاس های فرزندی داشته باشد، شما به گرفتن برخی از مراقبت های اضافی به وسیله ی متد describeContents() نیاز دارید. این کار به شما اجازه میدهد که کلاس خاصی که باید به وسیله ی Parcelable.Creator ساخته بشود را شناسایی کنید. شما میتوانید در مورد چگونه کار کردن این موضوع در سایت Stack Overflow بیشتر مطالعه کنید.

اکتیویتی Book و Layout

حالا ما میتوانیم اپلیکیشن مان را با book Activity  کامل کنیم. یک اکتیویتی جدید به نام BookActivity بسازید. layout را مانند چیزی که من در پاین ساختم، بساید.

در activity_book.xml، شما فقط به دو تا ویجت TextView ، که برای نشان دادن عنوان و نام نویسنده کتاب استفاده میشود نیاز دارید.

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

در این اکتیویتی، ما میخواهیم داده ای که انتقال داده شد، از main Activity را بگیریم و آن را در views نمایش بدهیم. به این صورت ما نمونه هایی از TextView هایمان را با استفاده از id از TestView یی که در layout ست کریدم، بدست می آوریم.

البته، سپس، getIntent()  را برای بازیابی داده از این اکتیویتی صدا میزنیم. داده هایی که بازیابی میکنیم، از کلاس Book با استفاده از مِتُدِ getParcelableExtra() جمع آوری میشوند، بعد، مقادیر را به TextViwes ها برای داده های جمع آوری شده، اختصاص میدهیم. به این صورت کارمان تمام میشود.

اپبیکیشن را بسازید و راه اندازی کنید، و شما باید زیبایی چیزی که ساختید را ببینید.

The completed app

جمع بندی و نتیجه گیری

در این مقاله، شما ملاحظه کردید که به چه صورت به راحتی توانستیم شی ها را از یک اکتیویتی به اکتیویتی دیگر منتقل کنیم. شما دیگر احتیاجی به بازیابی هر فیلد داده یی که به صورت جداگانه به شی intent منتقل شده ندارید. و شما نیاز نیست نام هر فیلدی را که منتفل میشود را به خاطر بسپارید. نه فقط این، بلکه این پردازش از عملکردِ java's serialize ، سریعتر است.

در این آموزش، شما یاد گرفتید که چطور از Parceable برای منتقل کردن داده ها از یک اکتیویتی به اکتیویتی دیگر استفاده کنید. برای اطلاعات بیشتر نسبت به  Parceable میتوانید از مستندات رسمی آن دیدن فرمایید.

در عین حال، میتوانید از مقاله های دیگر ما درباره ی توسعه اندروید دیدن کنید.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.