آموزش SharedPreferences در اندروید برای ذخیره اطلاعات

ارسال شده توسط: حسین درویشی Comments: 0

آموزش SharedPreferences در اندروید برای ذخیره اطلاعات

یکی از راه های ذخیره اطلاعات در حافظه جانبی گوشی، استفاده از SharedPreferences است. روش های گوناگونی برای ذخیره اطلاعات کاربران نظیر، نام، بیوگرافی و… وجود دارد که از جمله آنها می توان به دیتابیس و حافظه رم اشاره کرد. اما بحث ما ذخیره بر روی حافظه جانبی گوشی و در یک فایل می باشد. در ادامه با آموزش SharedPreferences در اندروید بیشتر آشنا خواهید شد که وظیفه آن ذخیره بر روی یک فایل در حافظه گوشی است.

SharedPreferences چیست؟

اول اشاره ای مبنی بر چیستی SharedPreferences  در اندروید می کنم. از آنجایی که تمامی اطلاعاتی که از کاربران می گیریم، به طور پیش فرض در حافظه اصلی (رم)، در حال اجرا هستند و این حافظه موقتی است. یعنی موقعی که کاربر از اپلیکیشن بطور کامل خارج شود اطلاعات از بین خواهد رفت.

فرض کنید اپلیکیشنی دارید و زمانی که کاربری این اپلیکیشن را برای اولین بار اجرا می کند، ازش نام و نام خانوادگی را دریافت می کند تا در دفعات بعدی اپلیکیشن پیام خوش آمدگویی به کاربر دهد. و ما این اطلاعات نیازی نداریم تا در دیتابیس ذخیره کنیم. از جایی دیگر چون نیازی نداریم در دیتابییس ذخیره کنیم، پس نمی توان در حافظه اصلی آن را نگه داریم چون موقتی است. بنابراین از SharedPreferences باید استفاده کنیم.

SharedPreferences  برای برنامه نویس شرایطی را فراهم می آورد تا بتواند اطلاعات دریافتی از کاربر را در حافظه گوشی در یک فایل به همراه متغیرها و مقادیر ذخیره کند.

در ادامه دقیقاً با همین مثال می خواهیم پیش برویم.

فرم مربوط به دریافت نام، نام خانوادگی و سن کاربر:

<?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="5dp"
tools:context=".MainActivity">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/label1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_margin="20dp"
android:text="first name: "
android:textSize="14dp" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/input_first_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/label1"
android:inputType="textPersonName" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/label2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/label1"
android:layout_alignLeft="@id/label1"
android:layout_marginTop="30dp"
android:text="last name: " />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/input_last_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/input_first_name"
android:layout_alignBottom="@id/label2"
android:inputType="textPersonName"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/label3"
android:text="Age: "
android:layout_alignLeft="@id/label1"
android:layout_below="@id/label2"
android:layout_marginTop="30dp"
/>
<androidx.appcompat.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/input_age"
android:layout_alignLeft="@id/input_first_name"
android:layout_below="@id/input_last_name"
android:layout_alignBottom="@id/label3"
android:inputType="number"
android:maxLength="3"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@id/label3"
android:layout_marginTop="30dp"
android:layout_centerHorizontal="true">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="save"
android:id="@+id/btn_save"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="load"
android:id="@+id/btnload"/>
</LinearLayout>
</RelativeLayout>
آموزش SharedPreferences در اندروید برای ذخیره اطلاعات

در این مثال می خواهیم پس از ذخیره کردن اطلاعات داده را لود کنیم.

خوب حالا سراغ جاوا خواهیم رفت.

بشکل سراسری این موارد را در کدهای جاوا استفاده می کنیم:

    EditText input_first_name, input_last_name, input_age;
Button btn_save, btn_load;
SharedPreferences pref;

ناگفته پیداست که SharedPreferences یک کلاس است و دارای متدهای متعددی است که در ادامه بررسی خواهد شد.

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

اولی:

pref = getPreferences(MODE_PRIVATE);

موقعی که بخواهیم از مد MODE_PRIVATE استفاده کنیم، هر داده ای که ثبت شود، فقط در اکتیویتی جاری قابل دسترسی است؛ یعنی در اکتیویتی ای که از این کد استفاده کردید فقط می توانید با این اکتیوتی به داده های ذخیره شده دسترسی داشته باشید.

این دستور در داخل متد onCreate قرار می گیرد. چون باید قبل از استارت شدن پروژه مشخص کنیم که از چه مدی استفاده خواهیم کرد.

اما ممکن است شما بخواهید داده ها را در اکتیویتی دیگری نیز لود کنید برای چنین کاری باید از روش دوم استفاده کنید: در حالت دوم شما فقط یک نام به فایل مورد نظر می دهید و اون فایل رو لود می کنید. در حالت اول نام فایل همان نام اکتیویتی است.

نکته: داده های شما به هیچ عنوان رمزنگاری نمی شوند و در یک فایلی ساده ذخیره شده است که می توان آن را براحتی خواند.

در حالت دوم بازم هم مد ما مد، Private است اما با این تفاوت که فایل ما نام بدلخواهی دارد و همچنین می توانیم در یک اکتیویتی داده ها را ذخیره و در یک اکتیویتی دیگر داده ها را لود کنیم.

pref=getSharedPreferences("myprefs",MODE_PRIVATE);

از حالت اول استفاده خواهیم کرد:

حالت اول

ذخیره داده ها با SharedPreferences

در ابتدا قصد داریم داده ها را ذخیره کنیم. برای چنین منظوری باید در رویداد onClick دکمه btn_save کدهای ذخیره را بنویسیم.

قبل از انجام این کار یک متد با نام intitViews یا هر نام دلخواهی ایجاد کرده و آن را در متد onCreate فراخوانی کنید. بعد ازgetPreferences اینکار را انجام دهید. به این شکل:

    protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pref = getPreferences(MODE_PRIVATE);
intitViews();
}

حال رویداد کلیک دکمه onCreate را صدا بزنید و کدهای زیر را در آن قرار دهید:

این کار برای پیدا کردن ویوها می باشد و هنوز هیچ کاری برای ذخیره کردن اطلاعات انجام ندادیم.

        input_first_name = findViewById(R.id.input_first_name);
input_last_name = findViewById(R.id.input_last_name);
input_age = findViewById(R.id.input_age);
btn_save = findViewById(R.id.btn_save);
btn_load = findViewById(R.id.btnload);

حال مقادیر editText ها رو باید دریافت کرده و در یک متغیر ذخیره کنیم. در ادامه کدهای زیر را اضافه کنید.

                String firstname = input_first_name.getText().toString().trim();
String lastname = input_last_name.getText().toString().trim();
String age = input_age.getText().toString().trim();

حال نیاز دارم یک ادیتور از آبجکت SharedPreferences.Editor برای SharedPreferences دریافت کنم.

SharedPreferences.Editor editor = pref.edit();

حال می تونم داده های خودم روبا متد putString ذخیره کنم. این متد دوتا پارامتر دریافت خواهد کرد که اولی کلید هست و دومی مقدار آن کلید است. بدلخواه می تونید نام کلید رو انتخاب کنید:


editor.putString("firstname", firstname);
editor.putString("lastname", lastname);
editor.putString("age", age);

در آخر نیز باید متد apply رو نیز صدا بزنم تا تغییرات رو اعمال کنه.

editor.apply();

حالا باید داده ها رو لود کنم.

لود کردن داده ها از SharedPreferences در اندروید

برای لود کردن باید نام کلید رو به متد getString پاس بدم.

برای این منظور ابتدا متد onclick دکمه btn_load رو صدا بزنید و کدهای زیر را داخل آن قرار دهید: در متد getString باید دوتا پارامتر را مشخص کنیم پارامتر اول نام کلید، پارامتر دوم: درصورتی که کلید رو نتونه پیدا کنه متن پارامتر دوم رو نمایش میده.

                String firstname = pref.getString("firstname", "Not=Found");
String lastname = pref.getString("lastname", "Not_found");
String age = pref.getString("age", "Not-Found");
Toast.makeText(MainActivity.this, "firstname: "+firstname +"\n"
+"lastname: "+lastname+"\n"
+"age: "+age, Toast.LENGTH_SHORT).show();

در انتها کل پروژه رو می تونید دانلود کنید:

برای دانلود کلیک کنید
برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *