مقالات

آموزش Shared Preferences در اندروید

شما در اندروید به روش‌های مختلفی می‌توانید داده‌های مورد نظر خود را در حافظه‌ ذخیره کنید، یکی از این روش‌ها Shared Preferences می‌باشد. SharedPreferences در اندروید یکی از معروف‌ترین روش‌های ذخیره سازی داده می‌باشد که اندروید آن را به شما ارائه می‌دهد. در ادامه با آموزش Shared Preferences در اندروید، با ما همراه باشید تا روش کار با آن را یاد بگیرید.

راستی قبل از اینکه ادامه این آموزش رو بخونی، میدونستی ما تو سایت ترولرن یه دوره صفر مطلق اندروید داریم که بصورت رایگان کل کاتلین رو آموزش دادیم و نحوه استفاده از اون تو اندروید رو بصورت کامل بررسی کردیم این دوره ویدیویی رو از دست ندید.

 

Shared Preferences چیست؟

SharedPreferences در اندروید روشی است که در آن می‌توان مقدار کمی از داده‌های اولیه را به شکل جفت key/value (کلید/مقدار) در فایل‌های ذخیره سازی دستگاه به صورت String ،int ،float ،Boolean ذخیره و بازیابی کرد. این فایل‌ها به صورت یک فایل XML درون برنامه ایجاد شده و در حافظه دستگاه می‌باشند.
Shared Preferences را می‌توان به عنوان یک دیکشنری یا یک جفت key / value در نظر گرفت. به عنوان مثال، ممکن است یک کلید “Username” داشته باشید و شما برای این کلید مقدار نام کاربری کاربر را ذخیره کنید. سپس می‌توانید نام کاربری ذخیره شده را توسط کلید بازیابی کنید (در این مثال “Username” کلید ما بود).
شما می‌توانید Shared Preferences API داشته باشید به این صورت که با استفاده از آن می‌توانید تنظیمات را ایجاد و ذخیره کرده و هر زمان که به آن نیاز داشتید از آن استفاده کنید. کلاس API ،Shared Preferences‌ها را برای خواندن، نوشتن و مدیریت این داده‌ها فراهم می‌کند.
SharedPreferences در اندروید برای شرایط مختلفی مناسب می‌باشد. به عنوان مثال، در مواردی که تنظیمات کاربر نیاز به ذخیره شدن دارند و یا داده‌هایی که از قبل ذخیره شده‌اند، می‌توانند در اکتیویتی‌های (Activity) مختلف درون برنامه استفاده شوند.

اگر با چرخه‌ی عمر کتیویتی آشنا باشید می‌دانید که، ()onPause همیشه قبل از قرار گرفتن اکتیویتی شما در Background یا Destroyed فراخوانی می‌شود، بنابراین برای اینکه داده‌ها به صورت مداوم ذخیره شوند، ترجیح می‌دهیم آن‌ها را در ()onPause ذخیره کنیم، که می‌تواند در ()onCreate اکتیویتی بازیابی شود. داده‌های ذخیره شده با استفاده از Shared Preferences در محدوده‌ی (Scope) برنامه به صورت خصوصی حفظ می‌شوند.

SharedPreferences مخصوص برنامه است، یعنی داده‌ها با انجام یکی از گزینه‌های زیر از بین می‌روند:

  • هنگامی که برنامه را حذف کنید.
  • هنگامی که دیتای برنامه را (از طریق تنظیمات) پاک کنید.
همان‌طور که از نام آن مشخص است، هدف اصلی از ذخیره‌ی اطلاعات پیکربندی مشخص شده توسط کاربر، مانند تنظیمات خاص کاربر، نگه‌داشتن کاربر در برنامه است.
برای دسترسی به تنظیمات، سه API برای انتخاب داریم:
  • ()getPreferences: برای دسترسی به تنظیمات خاص اکتیویتی، از درون اکتیویتی شما استفاده می‌شود.
  • ()getSharedPreferences: برای دسترسی به تنظیمات سطح برنامه، از درون اکتیویتی شما (یا Context دیگر برنامه‌ها) استفاده می‌شود.
  • ()getDefaultSharedPreferences: برای دریافت Shared Preferences که با چارچوب تنظیمات کلی اندروید سازگار است، استفاده می‌شود.
در این آموزش ما از ()getSharedPreferences  استفاده خواهیم کرد. این متد به شرح زیر تعریف می‌شود:
getSharedPreferences (String PREFS_NAME, int mode)
PREFS_NAME نام پرونده است.
mode حالت عملیاتی است.
حالت‌های عملیاتی قابل اجرا در زیر وجود دارد:
  • MODE_PRIVATE: حالت پیش فرض می‌باشد، که در آن تنها با خود برنامه می‌توان به پرونده ایجاد شده دسترسی پیدا کرد.
  • MODE_WORLD_READABLE: ایجاد پرونده‌های قابل خواندن در دنیا بسیار خطرناک است و احتمالاً باعث ایجاد حفره‌های امنیتی در برنامه‌ها می‌شود.
  • MODE_WORLD_WRITEABLE: ایجاد پرونده‌های قابل نوشتن در دنیا بسیار خطرناک است و احتمالاً باعث ایجاد حفره‌های امنیتی در برنامه‌ها می‌شود.
  • MODE_MULTI_PROCESS: این متد، تنظیمات را بررسی می‌کند حتی اگر نمونه‌ای از Shared Preferences قبلاً بارگیری شده باشد.
  • MODE_APPEND: این متد تنظیمات جدید را به تنظیمات موجود اضافه می‌کند.
  • MODE_ENABLE_WRITE_AHEAD_LOGGING: هنگامی که تنظیم شود، به طور پیش فرض نوشتن قبل از ورود را فعال می‌کند.

مقداردهی اولیه

برای ویرایش و ذخیره‌ی تغییرات در Shared Preferences، به یک ویرایشگر (Editor) نیاز داریم.

می توانید از کد زیر برای دریافت Shared Preferences استفاده کنید.

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();

ذخیره‌ی اطلاعات

()editor.commit به منظور ذخیره‌ی تغییرات در تنظیمات مشترک استفاده می‌شود.
editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long
editor.commit(); // commit changes

بازیابی اطلاعات

داده‌ها را می‌توان با فراخوانی ()getString به شرح زیر از تنظیمات ذخیره شده بازیابی کرد:
pref.getString("key_name", null); // getting String
pref.getInt("key_name", -1); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean

پاک کردن یا حذف اطلاعات

(“remove (“key_name برای حذف آن مقدار خاص استفاده می‌شود.
editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes

برای پاک کردن همه‌ی داده‌ها از ()clear استفاده می‌شود.

editor.clear();
editor.commit(); // commit changes

 مثالی از Shared Preferences در اندروید

طرح activity_main.xml شامل دو ویو‌ی EditText است که نام و ایمیل را ذخیره کرده و نمایش می‌دهد. این سه دکمه OnClick‌های مربوطه را در MainActivity پیاده سازی می‌کنند.

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >
    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="Save"
        android:text="Save" />
    <Button
        android:id="@+id/btnRetr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:onClick="Get"
        android:text="Retrieve" />
    <Button
        android:id="@+id/btnClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/etEmail"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="clear"
        android:text="Clear" />
    <EditText
        android:id="@+id/etEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Email"
        android:inputType="textEmailAddress"
        android:layout_below="@+id/etName"
        android:layout_marginTop="20dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Name"
        android:inputType="text"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/etEmail"
        android:layout_alignStart="@+id/etEmail" />
</RelativeLayout>
از پرونده‌ی MainActivity.java برای ذخیره و بازیابی داده‌ها از طریق کلیدها استفاده می‌شود.
package com.journaldev.sharedpreferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
    SharedPreferences sharedpreferences;
    TextView name;
    TextView email;
    public static final String mypreference = "mypref";
    public static final String Name = "nameKey";
    public static final String Email = "emailKey";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        sharedpreferences = getSharedPreferences(mypreference,
                Context.MODE_PRIVATE);
        if (sharedpreferences.contains(Name)) {
            name.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            email.setText(sharedpreferences.getString(Email, ""));
        }
    }
    public void Save(View view) {
        String n = name.getText().toString();
        String e = email.getText().toString();
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString(Name, n);
        editor.putString(Email, e);
        editor.commit();
    }
    public void clear(View view) {
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        name.setText("");
        email.setText("");
    }
    public void Get(View view) {
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        sharedpreferences = getSharedPreferences(mypreference,
                Context.MODE_PRIVATE);
        if (sharedpreferences.contains(Name)) {
            name.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            email.setText(sharedpreferences.getString(Email, ""));
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

mypreference نام فایلی است که در آن جفت کلید-مقدار Shared Preferences ذخیره شده است.

برای مطالعه بیشتر میتونید اینجا رو ببینید.
‫0/5 ‫(0 نظر)
محمد زارع

از سال 94 بصورت جدی وارد عرصه برنامه نویسی اندروید شدم، در شرکت‌ها و استارت‌آپ‌های زیادی مشغول به کار بوده و تجربه کسب کرده ام و در این سایت قصد دارم این تجربه را به اشتراک بگذارم

Recent Posts

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید: راهنمای جامع و کاربردی

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید یکی از مهم‌ترین فاکتورهایی است که برای کاربران در دنیای امروز…

3 ماه ago

سوالات مصاحبه‌ی استخدامی کاتلین همراه با جواب(قسمت چهارم)

مصاحبه‌ی استخدامی کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

3 ماه ago

سوالات مصاحبه استخدام زبان کاتلین همراه با جواب(قسمت سوم)

مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه…

3 ماه ago

سوالات مصاحبه استخدام کاتلین همراه با جواب(قسمت دوم)

مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

4 ماه ago

سوالات مصاحبه استخدامی کاتلین همراه با جواب(قسمت اول)

مصاحبه استخدامی کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

4 ماه ago

نوتیفیکیشن در اندروید: نحوه کار با آن در کاتلین

نوتیفیکیشن در اندروید امروزه یکی از قابلیت‌های مهم و پرکاربرد در اپلیکیشن‌های اندروید هستند. با…

4 ماه ago