نماد سایت امپراطوری من

استفاده از shared preferences در اندروید

android Development

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

این ویژگی به ما این امکان را می‌دهد تا داده‌‌های مربوط به تنظیمات برنامه اندرویدی خود را به سادگی در هر کجای برنامه ذخیره کرده یا برای استفاده مجدد بازخوانی کنیم. برای ایجاد یک داده جدید در Shared Preferences به دو چیز نیاز داریم. اول یک کلید منحصر به فرد که به کمک آن بتوانیم در استفاده‌های بعدی، مقدار ذخیره شده را فراخوانی کنیم و دوم نوع داده‌ای که می‌خواهیم در آن کلید ذخیره شود.

[divider]

ایجاد Shared Preferences

برای ایجاد یک کلید جدید در Shared Preferences می‌توان از کد زیر استفاده کرد:


SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putString("name", "Yusef");
editor.putInt("age", 28);
editor.apply();

در کد بالا دو کلید جدید ایجاد کردیم، یکی از جنس متن با کلید name که عبارت متنی Yusef و دیگری کلید age که مقدار عددی ۲۸ را در خود ذخیره کرده است. در انتها برای ذخیره دو کلید ایجاد شده از متند apply استفاده کرده‌ایم.

[divider]

بازخوانی از Shared Preferences

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


SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String name = prefs.getString("name", null);
if (name != null) {
int age = prefs.getInt("age", 0); //0 is the default value.
}

از آنجایی که ممکن است مقداری که بازخوانی میکنیم از قبل وجود نداشته باشد، می‌توانیم یک مقدار پیشفرض تعیین کنیم که در صورت موجود نبودن کلید مورد نظر، مقدار پیشفرض فراخوانی شود. در نمونه کد بالا چنانچه name قبلا ذخیره نشده باشد مقدار null در متغیر name قرار می‌گیرد و در ادامه چون شرط name != null برقرار نمی‌شود، متغیر age مقدار دهی نخواهد شد. اما اگر کلید name قبلا ایجاد شده باشد، مقدار آن در متغیر name قرار می‌گیرد و شرط برقرار شده و متغیر age  نیز مقدار دهی می‌شود. اگر کلید age هم ایجاد نشده باشد، مقدار پیشفرض آن یعنی عدد صفر در متغیر age قرار می‌گیرد.

[divider]

حذف از Shared Preferences

حذف کردن داده از Shared Preferences ساده‌ترین کار است. برای حذف دو حالت داریم. حالت اول اینکه بخواهیم یک کلید مشخص را حذف کنیم و حالت دوم اینکه بخواهیم تمام تنظیمات برنامه را حذف کنیم. برای حذف یک کلید خاص از نمونه کد زیر استفاده می‌کنیم:


SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.remove("name");
editor.remove("age");
editor.apply();

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


SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.clear();
editor.apply();

دقت داشته باشید که به جای متد apply می‌توان از متد commit هم استفاده کرد. تفاوت این دو در این است که apply بصورت غیرهمگام(آسنکرون) عمل می‌کند. در صورتی که commit به صورت همگام(سنکرون) عمل می‌کند. یعنی اگر از متد commit استفاده کنید. وقتی برنامه به خطی که commit صدا زده شده می‌رسد، تا تغییرات اعمال نشود به خط بعدی کد نمی‌رویم. ممکن است اینگونه کد باعث شود کاربر در هنگام ثبت تغییرات احساس لگ کند. اما اگر از apply استفاده کنید، وقتی به خطی که apply صدا زده شده است می‌رسید، دستور ثبت تغییرات صادر می‌شود اما ادامه روند برنامه جریان پیدا می‌کند. در این حالت عملیات اعمال تغییرات در محیطی جدا از کد جریان می‌یابد.

موفق و پیروز باشید…

خروج از نسخه موبایل