آموزش Shared Preferences در اندروید | Shared Preference چیست؟

دسته بندی: آموزش
سطح مقاله: ساده
زمان مطالعه: 10 دقیقه
۱۸ شهریور ۱۳۹۹
شما در اندروید به روش‌های مختلفی می‌توانید داده‌های مورد نظر خود را در حافظه‌ ذخیره کنید، یکی از این روش‌ها 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 ذخیره شده است.
تصویر زیر خروجی نهایی پروژه‌ی ما را نشان می‌دهد:
آموزش Shared Preferences در اندروید

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

مطالعه‌ی مقالات زیر را به شما پیشنهاد می‌کنیم:

جمع‌بندی:

اندروید روش‌های زیادی برای ذخیره‌ی داده‌های یک برنامه فراهم می‌کند. یکی از این راه‌ها Shared Preferences نامیده می‌شود. Shared Preferences به شما امکان می‌دهد داده‌ها را به صورت جفت کلید/مقدار ذخیره و بازیابی کنید. شما در این مقاله آموختید که Shared Preferences چیست و در آموزش Shared Preferences در اندروید با ما همراه بودید، امیدوار هستیم که این مقاله برای شما مفید بوده باشد. اگر در این زمینه تجربه‌ یا سوالی دارید خوشحال می‌شویم آن را با ما و کاربران وب سایت سون لرن به اشتراک بگذارید.

منابع:

geeksforgeeks

journaldev

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

 

چه امتیازی به این مقاله می دید؟

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :