اندروید راه های زیادی را برای ذخیره داده های یک برنامه ارائه می دهد که یکی از این راه ها Shared Preferences نام دارد. Shared Preferences به شما امکان می دهد داده ها را در قالب کِی وَلیو (کلید و مقدار)، ذخیره سازی و بازیابی کنید.
برای استفاده از Shared Preference ، باید متد ()getSharedPreferences را فراخوانی کنید که یک نمونه از کلاس SharedPreference را که اشاره به فایلی که حاوی مقادیر ذخیره سازی است، را برگرداند.
SharedPreferences sharedpreferences = getSharedPreferences("MY_FILE_NAME", Context.MODE_PRIVATE);
حالت های ایجاد shared preferences
پارامتر اول کلید که همان نام فایل را مشخص میکند و پارامتر دوم MODE یا مدل ذخیره سازی داده ها است. به غیر از حالت خصوصی، حالت های دیگری نیز موجود است که در زیر لیست شده است :
حالت و توضیحات | ردیف |
MODE_APPEND
این حالت Shared Preference جدید را با Shared Preference موجود وصل می کند. |
1 |
MODE_ENABLE_WRITE_AHEAD_LOGGING
flag باز پایگاه داده را تنظیم میکند، به طور پیشفرض ثبت پیشنویس را فعال میکند. |
2 |
MODE_MULTI_PROCESS
حالت بالا به شما اجازه میدهد که هم زمان چند Shared Preference را بارگیری کنید. |
3 |
MODE_PRIVATE
در این حالت Shared Preference مشخص شده تنها برای این اپلیکیشن قابل ویرایش و خواندن است. |
4 |
MODE_WORLD_READABLE
استفاه از این حالت به Shared Preference شما این امکان را میدهد که توسط اپلیکیشن های دیگری نیز خوانده شود. |
5 |
MODE_WORLD_WRITEABLE
با استفاه از این حالت به Shared Preference شما این امکان را میدهد که توسط اپلیکیشن های دیگری نیز نوشته شود. |
6 |
با استفاده از کلاس SharedPreferences.Editor می توانید هر چیزی را که نیاز در sharedpreferences ذخیره کنید. با استفاده از فراخوانی متد edit میتوانید از نمونه کلاس SharedPreference, یک شی Editor دریافت کنید که بتوانید عمل ذخیره سازی را انجام بدهید. به کدهای پایین دقت کنید:
Editor editor = sharedpreferences.edit(); editor.putString("key", "value"); editor.apply();
متدهای مهم shared preferences
جدای از متد putString، متدهایی دیگری در کلاس Editor وجود دارد که امکان دستکاری دادهها را در shared preferences فراهم میکند. این متدها را در پایین آورده ایم که شامل توضیحات آن میباشد:
متد و توضیحات | ردیف |
apply()
یک متد انتزاعی است که تغییرات شما را از حالت Editor به شی sharedPreference که در حال استفاده آن هستید بازگرداند. |
1 |
clear()
تمام مقادیر را که قبلا ذخیره شده است را با استفاده از Editor حذف می کند. |
2 |
remove(String key)
مقداری که کلید آن به عنوان پارامتر ارسال شده است را حذف می کند. |
3 |
putLong(String key, long value)
این یک مقدار عددی long که بعنوان پارامتر ارسال میشود را ذخیره می کند. |
4 |
putInt(String key, int value)
در این متد میتوانید یک مقدار عدد صحیح را که بعنوان پارامتر ارسال میشود را ذخیره می کند. |
5 |
putFloat(String key, float value)
مقدار عددی float که بعنوان پارامتر ارسال میشود را ذخیره می کند. |
6 |
مثال
این مثال استفاده از shared preferences را نشان می دهد که صفحهای را با چند فیلد متنی نمایش میدهد که وقتی برنامه بسته میشود، مقدار آن ذخیره میشود و پس از باز شدن دوباره آن بازگرداندی میشود. برای آزمایش این مثال، میتوانید آن را بر روی یک دستگاه واقعی و مجازی پس از توسعه برنامه طبق مراحل زیر اجرا کنید:
توضیحات | مرحله |
ابتدا یک پروژه جدید در اندروید استودیو با یک پکیج دلخواه ایجاد کنید و ادامه مراحل را دنبال کنید. | 1 |
کدهای درون فایل MainActivity.class را مطابق کدهای که در پایین آورده ایم تغییر بدهید. | 2 |
کدهای درون فایل activity_main.xml را مطابق کدهای که در پایین آورده ایم تغییر بدهید. | 3 |
برنامه را بر روی یک تلفن واقعی یا شبیه ساز اجرا کنید و تست را انجام بدهید. | 4 |
فایل MainActivity.java
package com.foray.articlelib; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private EditText ed1, ed2, ed3; public static final String MyPREFERENCES = "My7ClonerPrefs"; public static final String Name = "nameKey"; public static final String Phone = "phoneKey"; public static final String Email = "emailKey"; private SharedPreferences sharedpreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed1 = findViewById(R.id.editText); ed2 = findViewById(R.id.editText2); ed3 = findViewById(R.id.editText3); Button b1 = findViewById(R.id.button); sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); b1.setOnClickListener(v -> { String n = ed1.getText().toString(); String ph = ed2.getText().toString(); String e = ed3.getText().toString(); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Name, n); editor.putString(Phone, ph); editor.putString(Email, e); editor.apply(); Toast.makeText(MainActivity.this, "ممنون ذخیره شد", Toast.LENGTH_LONG).show(); }); } }
کدهای فایل activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="28dp" tools:context=".MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="Shared Preference " android:textSize="35dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:text="7Cloner.com" android:textColor="#009688" android:textSize="35dp" /> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView2" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_marginTop="67dp" android:hint="نام" /> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:hint="گذرواژه" /> <EditText android:id="@+id/editText3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText2" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:hint="آدرس ایمیل" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText3" android:layout_centerHorizontal="true" android:layout_marginTop="50dp" android:text="ذخیره سازی" /> </RelativeLayout>
پس از قراردادن کدهای بالا درون پروژه تان میتوانید آن را اجرا کنید و نتیجه را ببینید :
در بالا تصویر نتیجه کار را نشان داده ایم که یک مقداری را ذخیره کرده ایم و مجدد آن را بازیابی کرده ایم.