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

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

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

به تنظیمات برگزیده مشترک رسیدگی کنید

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

  • getSharedPreferences() : اگر به چندین فایل ترجیحی مشترک نیاز دارید که با نام مشخص شده اند، از این مورد استفاده کنید. می‌توانید از هر Context در برنامه خود با آن تماس بگیرید.
  • getPreferences() : اگر نیاز به استفاده از یک فایل ترجیحی مشترک برای فعالیت دارید، از این مورد از یک Activity استفاده کنید. از آنجا که این یک فایل ترجیحی مشترک پیش‌فرض را که متعلق به فعالیت است بازیابی می‌کند، نیازی به ارائه نام ندارید.

به عنوان مثال، کد زیر به فایل ترجیحات مشترک که توسط رشته منبع 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() برای دریافت فایل ترجیحی مشترک پیش‌فرض برای کل برنامه خود استفاده کنید. برای اطلاعات بیشتر، به راهنمای برنامه‌نویس تنظیمات مراجعه کنید.

در تنظیمات برگزیده مشترک بنویسید

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

کلیدها و مقادیری را که می خواهید بنویسید با متدهایی مانند: 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);