جلسه 6 Shared Preferences
مقدمه: ذخیرهسازی تنظیمات در اپلیکیشنها
در دنیای توسعه اپلیکیشنهای موبایل و دسکتاپ، اغلب نیاز داریم تا تنظیمات کاربر، وضعیت برنامه یا دادههای کوچک و موقتی را ذخیره کنیم. این اطلاعات میتواند شامل موارد زیر باشد:
- تنظیمات کاربر: مانند فعال/غیرفعال کردن اعلانها، انتخاب تم (روشن/تاریک)، زبان برنامه.
- وضعیت برنامه: مانند آخرین صفحه بازدید شده، نام کاربری وارد شده (اگر نیاز به ذخیرهسازی امن نباشد).
- دادههای کوچک: مانند امتیاز بالای کاربر در یک بازی، اولین بازدید کاربر از برنامه.
برای این منظور، روشهای مختلفی وجود دارد، اما یکی از سادهترین و پرکاربردترین آنها، استفاده از Shared Preferences است.
۲. Shared Preferences چیست؟
Shared Preferences یک API در سیستمعامل اندروید (و مشابه آن در پلتفرمهای دیگر) است که به شما امکان میدهد دادههای کلید-مقدار (Key-Value) را به صورت سبک و ساده ذخیره کنید. این روش برای ذخیرهسازی دادههای کوچک و غیرحساس ایدهآل است.
ویژگیهای کلیدی Shared Preferences:
- ذخیرهسازی کلید-مقدار: هر دادهای که ذخیره میکنید، با یک کلید منحصربهفرد همراه است. برای بازیابی داده، از همان کلید استفاده میکنید.
- انواع دادههای پشتیبانی شده: Shared Preferences میتواند انواع دادههای اولیه (Primitive) مانند
String,Int,Boolean,Float,Longرا ذخیره کند. - فایل خصوصی: دادههای Shared Preferences در یک فایل XML خصوصی در دستگاه ذخیره میشوند و فقط اپلیکیشن شما به آن دسترسی دارد.
- کارایی بالا برای دادههای کوچک: خواندن و نوشتن در Shared Preferences بسیار سریع است، به شرطی که حجم دادهها زیاد نباشد.
- محدودیت حجم: این روش برای ذخیرهسازی حجم زیادی از داده (مانند تصاویر، لیستهای طولانی یا دادههای حجیم) مناسب نیست. در چنین مواردی باید از روشهای دیگر مانند پایگاه داده SQLite یا ذخیرهسازی فایل استفاده کرد.
۳. نحوه کار با Shared Preferences (مثال مفهومی)
فرض کنید میخواهیم یک تنظیم ساده در برنامه ذخیره کنیم: آیا کاربر میخواهد اعلانها را دریافت کند یا خیر (یک مقدار Boolean).
مراحل کلی:
- دسترسی به Shared Preferences: ابتدا باید یک نمونه (Instance) از Shared Preferences در کد خود دریافت کنیم.
- ایجاد یا ویرایشگر (Editor): برای نوشتن دادهها، نیاز به یک ویرایشگر داریم.
- قرار دادن دادهها: با استفاده از ویرایشگر، کلید و مقدار داده مورد نظر را قرار میدهیم.
- ذخیره (Commit/Apply): تغییرات را ذخیره میکنیم.
commit()تغییرات را به صورت همگام (Synchronous) ذخیره میکند وapply()به صورت ناهمگام (Asynchronous).apply()معمولاً ترجیح داده میشود تا رابط کاربری مسدود نشود. - خواندن دادهها: برای خواندن داده، از نمونه Shared Preferences و کلید مربوطه استفاده میکنیم و مقدار پیشفرض (Default Value) را نیز مشخص میکنیم تا در صورتی که کلید وجود نداشت، خطایی رخ ندهد.
مثال کد (مفهومی - شبه کد):
java// فرض کنید در یک Activity یا Fragment اندروید هستیم
// ۱. دسترسی به Shared Preferences
SharedPreferences prefs = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
// "MyPrefs" نام فایل ذخیرهسازی است
// Context.MODE_PRIVATE یعنی فقط همین اپلیکیشن به این فایل دسترسی دارد
// ۲. گرفتن ویرایشگر برای نوشتن
SharedPreferences.Editor editor = prefs.edit();
// ۳. قرار دادن دادهها
// ذخیره وضعیت اعلانها (مثلا کاربر نمیخواهد اعلان دریافت کند)
editor.putBoolean("notifications_enabled", false);
// ذخیره نام کاربری (مثلا "user123")
editor.putString("username", "user123");
// ذخیره یک عدد (مثلا امتیاز بازی)
editor.putInt("game_score", 1500);
// ۴. ذخیره تغییرات
editor.apply(); // یا editor.commit();
// ---------- حالا برای خواندن دادهها ----------
// ۵. خواندن دادهها
// خواندن وضعیت اعلانها، اگر کلید "notifications_enabled" وجود نداشت، مقدار پیشفرض true را برگردان
boolean notificationsEnabled = prefs.getBoolean("notifications_enabled", true);
// خواندن نام کاربری، اگر کلید "username" وجود نداشت، مقدار پیشفرض "Guest" را برگردان
String username = prefs.getString("username", "Guest");
// خواندن امتیاز بازی، اگر کلید "game_score" وجود نداشت، مقدار پیشفرض 0 را برگردان
int gameScore = prefs.getInt("game_score", 0);
// نمایش مقادیر خوانده شده (مثلا در Logcat)
// Log.d("SharedPreferences", "Notifications Enabled: " + notificationsEnabled);
// Log.d("SharedPreferences", "Username: " + username);
// Log.d("SharedPreferences", "Game Score: " + gameScore);
۴. تمرین پایان فصل
برای تثبیت مفاهیم، موارد زیر را در نظر بگیرید:
- ایجاد یک برنامه ساده: یک اپلیکیشن اندروید (یا مشابه آن در پلتفرم دیگر) بسازید که شامل دو دکمه باشد: “ذخیره تنظیمات” و “نمایش تنظیمات”.
- قابلیت ذخیره: با کلیک بر روی دکمه “ذخیره تنظیمات”، مقادیر زیر را با استفاده از Shared Preferences ذخیره کنید:
- یک مقدار Boolean با کلید
isDarkMode(فرض کنید کاربر تم تیره را فعال کرده است). - یک مقدار String با کلید
userName(مثلا “AliReza”). - یک مقدار Int با کلید
fontSize(مثلا 16).
- قابلیت نمایش: با کلیک بر روی دکمه “نمایش تنظیمات”، مقادیر ذخیره شده را از Shared Preferences بخوانید و در یک
TextViewنمایش دهید. حتماً مقادیر پیشفرض مناسبی را برای زمانی که تنظیمات هنوز ذخیره نشدهاند، در نظر بگیرید. - اضافه کردن قابلیت حذف: یک دکمه دیگر با عنوان “حذف تنظیمات” اضافه کنید. با کلیک بر روی این دکمه، تمام تنظیمات ذخیره شده را حذف کنید (از متد
editor.clear()استفاده کنید).
۵. خلاصه نکات کلیدی
- Shared Preferences برای ذخیرهسازی دادههای کوچک و سبک کلید-مقدار استفاده میشود.
- مناسب برای تنظیمات کاربر و وضعیتهای موقت برنامه.
- انواع دادههای اولیه مانند
String,Int,Boolean,Float,Longرا پشتیبانی میکند. - برای حجم زیاد داده مناسب نیست؛ در این موارد از SQLite یا ذخیرهسازی فایل استفاده کنید.
- دادهها در یک فایل XML خصوصی ذخیره میشوند.
- برای نوشتن از
Editorو متدهایput...()استفاده کنید. - برای ذخیره نهایی از
apply()(ناهمگام، ترجیحی) یاcommit()(همگام) استفاده کنید. - برای خواندن از متدهای
get...()و تعیین مقدار پیشفرض استفاده کنید. clear()برای حذف تمام دادهها وremove(key)برای حذف یک کلید خاص به کار میروند