آموزش Shared Preferences در اندروید
شما در اندروید به روشهای مختلفی میتوانید دادههای مورد نظر خود را در حافظه ذخیره کنید، یکی از این روشها Shared Preferences میباشد. SharedPreferences در اندروید یکی از معروفترین روشهای ذخیره سازی داده میباشد که اندروید آن را به شما ارائه میدهد. در ادامه با آموزش Shared Preferences در اندروید، با ما همراه باشید تا روش کار با آن را یاد بگیرید.
راستی قبل از اینکه ادامه این آموزش رو بخونی، میدونستی ما تو سایت ترولرن یه دوره صفر مطلق اندروید داریم که بصورت رایگان کل کاتلین رو آموزش دادیم و نحوه استفاده از اون تو اندروید رو بصورت کامل بررسی کردیم این دوره ویدیویی رو از دست ندید.
Shared Preferences چیست؟
اگر با چرخهی عمر کتیویتی آشنا باشید میدانید که، ()onPause همیشه قبل از قرار گرفتن اکتیویتی شما در Background یا Destroyed فراخوانی میشود، بنابراین برای اینکه دادهها به صورت مداوم ذخیره شوند، ترجیح میدهیم آنها را در ()onPause ذخیره کنیم، که میتواند در ()onCreate اکتیویتی بازیابی شود. دادههای ذخیره شده با استفاده از Shared Preferences در محدودهی (Scope) برنامه به صورت خصوصی حفظ میشوند.
SharedPreferences مخصوص برنامه است، یعنی دادهها با انجام یکی از گزینههای زیر از بین میروند:
- هنگامی که برنامه را حذف کنید.
- هنگامی که دیتای برنامه را (از طریق تنظیمات) پاک کنید.
- ()getPreferences: برای دسترسی به تنظیمات خاص اکتیویتی، از درون اکتیویتی شما استفاده میشود.
- ()getSharedPreferences: برای دسترسی به تنظیمات سطح برنامه، از درون اکتیویتی شما (یا Context دیگر برنامهها) استفاده میشود.
- ()getDefaultSharedPreferences: برای دریافت Shared Preferences که با چارچوب تنظیمات کلی اندروید سازگار است، استفاده میشود.
getSharedPreferences (String PREFS_NAME, int 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.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
بازیابی اطلاعات
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
پاک کردن یا حذف اطلاعات
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>
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 ذخیره شده است.
درباره محمد زارع
از سال 94 بصورت جدی وارد عرصه برنامه نویسی اندروید شدم، در شرکتها و استارتآپهای زیادی مشغول به کار بوده و تجربه کسب کرده ام و در این سایت قصد دارم این تجربه را به اشتراک بگذارم
نوشته های بیشتر از محمد زارع
دیدگاهتان را بنویسید