اگر مجموعه نسبتاً کوچکی از مقادیر کلیدی دارید که میخواهید ذخیره کنید، میتوانید از 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);