مشکل در درک کار SharedPrefrences ها

ساخت وبلاگ
SharedPreferences یه دیتابیس ساده‌ی Key-Value هست. دیتابیس هست یعنی داده هایی که توش ذخیره میشه بعد از بسته شدن برنامه و باز شدن دوباره از بین نمیرن، و تا زمانی که برنامه Uninstall نشه یا خودتون داده ها رو پاک نکنین در دسترس هستن (مثلن اگر کاربر آپدیت جدید رو نصب کنه اون دیتا از بین نمیره). و Key-Value معنیش این هست که شما یه سری کلید دارید که هر کدوم یه مقدار رو نگهداری می کنن.

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

کد ذخیره این انتخاب کاربر می‌تونه این شکلی باشه:


// Initializing the Object and get access to SP
SharedPrefernces prefs = getSharedPreferences("pref_name", Context.MODE_PRIVATE);

// Store an integer value
prefs.edit().putInt("font_size", 12).commit();

و خب، حالا که این مقدار رو دخیره کردید، دلتون می‌خواد که هربار که برنامه باز میشه سایز فونت رو متناسب با انتخاب کاربر تغییر بدید. شرط اول این کار این هست که مقدار انتخابی کاربر رو بدونید:

// Read int value from SP by its Key, and return 16 if no value is set
int fontSize = prefs.getInt("font_size", 16);

الان شما مقدار ذخیره شده رو توسط کلیدش که font_size هست بدست میارید. توجه می‌کنید که این کلیدی همون شناسه ای هست که هنگام ذخیره و خوندن مجدد از SP ازش استفاده می کنیم و ثابت می‌مونه.
حالا اگه این کلید مقداری وجود نداشته باشه چی ؟ یعنی اصلن کاربر به صفحه‌ی تنظیمات نرفته که سایز فونت رو تغییر بده. در این شرایط بهتون اجازه می‌ده که مقدار پیشفرض هم تعیین کنید که درصورتی که اون کلید وجود نداشت، اون مقدار پیشفرض برگردونده بشه که در این مثال عدد 16 هست. زمانی که این کلید در SP ایجاد شد و مقدار گرفت، دیگه اون عدد 16 پیشفرض برگردونده نمیشه، مگر اینکه بعدها بیاید و اون کلید زو از SP حذف کنید.

این کدی که نوشتید کارش اینه که در هنگام اجرا، اول سه مقدار رو از SP می‌خونه که مربوط به نام، ایمیل و شماره تلفن هست. درصورتی که مقداری براشون وجود نداشته باشه، یه String خالی برگردونده میشه.
حالا مقدار این متعیرها رو در EditText ها نمایش میده. در اولین اجرای برنامه هیچکدوم از این سه کلید وجود ندارن پس در EditText ها یه رشته ی خالی نمایش داده میشه.

حالا اگه کاربر این EditText رو پر کنه، و بعد روی اون Button خاص کلیک کنه، سه مقداری که در EditText ها نوشنه شدن، در SP با سه کلید متفاوت ذخیره میشن.

نتیجه این هست که بار بعد که کاربر وارد این اکتیویتی میشه، دیگه اون سه کلید مقدار دارن و مقداری که کاربر بار قبل وارد کرده در EditText ها نمایش داده میشن.

یه مثال ساده برای SP رو قبلاً نوشته بودم که شاید بتونه برای درک بهتر موضوع بهتون کمک کنه: http://nevercom.blog.ir/post/run-cod...y-first-launch

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان programers بازدید : 142 تاريخ : سه شنبه 7 آذر 1396 ساعت: 12:27