ذخیره کردن داده‌های ساده با SharedPreferences

اگر مجموعه نسبتاً کوچکی از مقادیر کلیدی دارید که می‌خواهید ذخیره کنید، می‌توانید از میاناهای برنامه‌سازی کاربردی SharedPreferences استفاده کنید. یک شیء SharedPreferences به فایلی اشاره می‌کند که حاوی جفت‌های کلید-مقدار است و روش‌های ساده‌ای برای خواندن و نوشتن آن‌ها ارائه می‌دهد. هر فایل SharedPreferences توسط چارچوب مدیریت می‌شود و می‌تواند خصوصی یا هم‌رسانی‌شده باشد.

این صفحه به شما نشان می‌دهد که چگونه از میاناهای برنامه‌سازی کاربردی SharedPreferences برای ذخیره و بازیابی مقادیر ساده استفاده کنید.

دریافت کردن دستگیره برای اولویت‌های هم‌رسانی‌شده

می‌توانید با فراخوانی یکی از این روش‌ها، فایل اولویت مشترک جدیدی ایجاد کنید یا به فایل موجود دسترسی پیدا کنید:

  • getSharedPreferences(): اگر به چندین فایل اولویت هم‌رسانی‌شده نیاز دارید که با نام شناسایی می‌شوند، از این گزینه استفاده کنید. نام را با پارامتر اول مشخص می‌کنید. می‌توانید این را از هر Context در برنامه‌تان فراخوانی کنید.
  • getPreferences(): اگر لازم است فقط از یک فایل اولویت هم‌رسانی‌شده برای فعالیت استفاده کنید، از این مورد در Activity استفاده کنید. Because this retrieves a default shared preference file that belongs to the activity, you don't need to supply a name.

برای مثال، کد زیر به فایل اولویت‌های مشترک که با رشته منبع R.string.preference_file_key شناسایی می‌شود دسترسی پیدا می‌کند و آن را بااستفاده از حالت خصوصی باز می‌کند تا فایل فقط برای برنامه شما قابل‌دسترسی باشد:

کاتلین

val sharedPref = activity?.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE)

جاوا

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

هنگام نام‌گذاری فایل‌های اولویت هم‌رسانی‌شده، باید از نامی استفاده کنید که به‌طور منحصربه‌فرد برای برنامه‌تان قابل‌شناسایی باشد. روش خوب برای انجام این کار این است که نام فایل را با شناسه برنامه خود پیشوند کنید. برای مثال: "com.example.myapp.PREFERENCE_FILE_KEY"

یا اگر فقط به یک فایل اولویت هم‌رسانی‌شده برای فعالیتتان نیاز دارید، می‌توانید از روش getPreferences() استفاده کنید:

کاتلین

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)

جاوا

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

اگر از SharedPreferences API برای ذخیره تنظیمات برنامه استفاده می‌کنید، باید به‌جای آن از getDefaultSharedPreferences() برای دریافت فایل اولویت هم‌رسانی‌شده پیش‌فرض برای کل برنامه‌تان استفاده کنید. برای اطلاعات بیشتر، به راهنمای توسعه‌دهندگان تنظیمات مراجعه کنید.

نوشتن در اولویت‌های مشترک

برای نوشتن در فایل اولویت‌های مشترک، با فراخوانی edit() در SharedPreferences، SharedPreferences.Editor ایجاد کنید.

کلیدها و مقادیری را که می‌خواهید بنویسید با روش‌هایی مثل موارد زیر ارسال کنید: putInt() و putString(). سپس apply() یا commit() را فراخوانی کنید تا تغییرات ذخیره شود. برای مثال:

کاتلین

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    putInt(getString(R.string.saved_high_score_key), newHighScore)
    apply()
}

جاوا

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score_key), newHighScore);
editor.apply();

apply() شیء SharedPreferences درون حافظه را فوراً تغییر می‌دهد اما به‌روزرسانی‌ها را به‌صورت ناهمگام در دیسک می‌نویسد. یا می‌توانید از commit() برای نوشتن هم‌زمان داده‌ها در دیسک استفاده کنید. اما چون commit() هم‌زمان است، باید از فراخوانی آن از رشته اصلی خودداری کنید زیرا ممکن است رندر کردن واسط کاربری را موقتاً متوقف کند.

خواندن از اولویت‌های هم‌رسانی‌شده

برای بازیابی مقادیر از فایل اولویت‌های مشترک، روش‌هایی مانند getInt() و getString() را فراخوانی کنید، کلید مقدار موردنظرتان را ارائه دهید، و به‌طور اختیاری مقدار پیش‌فرضی را برای برگرداندن درصورت عدم وجود کلید ارائه دهید. برای مثال:

کاتلین

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key)
val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)

جاوا

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key);
int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);