آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

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

در ادامه، یک برنامه اندروید می سازیم که در آن، کاربر، ((نام)) و ((سن)) خود را در برنامه وارد می کند و چنانچه برنامه را ببندد و دوباره وارد برنامه شود، گزینه های وارد شده توسط وی، همچنان در کادر ورود اطلاعات، نمایش داده می شود (اگر بخواهد می تواند آنها را تغییر دهد، ولی به هر حال، مجبور نیست دوباره آنها را وارد نماید).

در برنامه eclipse ، ابتدا یک پروژه اندروید با نام Kelidestan.com_SharedPreferences می سازیم (نام package را برابر com.kelidestan.sharedpreferences انتخاب می کنیم. نام activity اصلی را برابر MainActivity انتخاب می کنیم و فایل xml متناظر آن را هم برابر activity_main قرار می دهیم).

در زیرمجموعه فولدر res ، یک فولدر با نام xml می سازیم و سپس درون آن، یک فایل xml ، با نام prefs.xml می سازیم :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

کدهای فایل prefs.xml را به صورت زیر می نویسیم :


<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <EditTextPreference android:key="name" android:title="@string/name" android:summary="@string/name_summary"/>
    <EditTextPreference android:title="@string/age" android:key="age" android:summary="@string/age_summary"/>
   
</PreferenceScreen>

که در آن، دو EditTextPreference تعریف کرده ایم. بنابراین، دو EditTextPreference خواهیم داشت که کاربر باید ((نام)) و ((سن)) خود را در آن وارد کند. با خروج کاربر از برنامه، مقادیر وارد شده توسط وی، از بین نمی رود و درون EditTextPreference ها، دوباره همان مقادیر، نمایش داده می شود.

اگر در کدهای بالا دقت کنید، متوجه می شوید که به 4 رشته (string) ارجاع داده ایم (با نام های name و name_summary و age و age_summary) که همگی باید در فایل strings.xml تعریف شوند. بنابراین باید فایل strings.xml را باز کنیم :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

کدهای فایل strings.xml را به صورت زیر می نویسیم (تعریف 4 رشته ذکر شده) :


<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Kelidestan.com_SharedPreferences</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="name">name</string>
    <string name="name_summary">Enter your name</string>
    <string name="age">age</string>
    <string name="age_summary">Enter your age</string>
    <string name="server">server</string>

</resources>

یک کلاس (class) با نام Prefs.java می سازیم :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

پس از ساخت کلاس (class)، کدهای آن به صورت زیر می باشد :


package com.kelidestan.sharedpreferences;

public class Prefs {

}

کدهای آن را به صورت زیر تغییر می دهیم :


package com.kelidestan.sharedpreferences;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.view.Menu;

public class Prefs extends PreferenceActivity {
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.prefs);
                // setContentView(R.layout.activity_main);
        }

}

بنابراین از ویژگی های کلاس PreferenceActivity ، در این کلاس، استفاده خواهد شد (ساخت کلاس Prefs ، بر اساس توسعه دادن کلاس PreferenceActivity).

اکنون، باید فایل AndroidManifest.xml را باز کنیم :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

کدهای فایل AndroidManifest.xml ، به صورت زیر می باشد :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kelidestan.sharedpreferences"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.kelidestan.sharedpreferences.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

باید خط زیر را به کدها اضافه کنیم :


<activity android:name=".Prefs"></activity>

بنابراین، در نهایت، کدهای فایل AndroidManifest.xml ، به صورت زیر خواهند بود :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kelidestan.sharedpreferences"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.kelidestan.sharedpreferences.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Prefs"></activity>
    </application>

</manifest>

خوب، تاکنون activity مربوط به SharedPreferences را با نام Pref (فایل Pref.java) ساختیم و تنظیمات مورد نظرمان را هم به آن اعمال نمودیم. اما اکنون باید گزینه ای در برنامه قرار بدهیم که توسط آن، کاربر وارد activity با نام Pref بشود. برای این منظور، باید یک دکمه (button) در activity اصلی برنامه بسازیم که کاربر با اشاره بر روی آن، وارد activity با نام Pref بشود.

ابتدا فایل activity_main.xml را که برای نمایش activity اصلی برنامه اندروید به کار می رود، باز می کنیم :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

نمایش گرافیکی آن، به صورت زیر می باشد :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

مشاهده می کنید که به طور پیش فرض، دارای یک TextView می باشد. ابتدا TextView را حذف کرده و سپس یک Button در آن قرار می دهیم :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

بنابراین ، شکل زیر را خواهیم داشت :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

سپس در properties مربوط به Button ، باید ببینیم که id آن چیست (یا id دلخواه خود را تعریف کنیم) :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

بنابراین id مربوط به Button ، برابر button1 می باشد (آن را بعدا نیاز داریم).

اکنون باید به سراغ فایل MainActivity.java برویم، که همان فایل مربوط به activity اصلی برنامه اندروید ما می باشد :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

در ابتدا، کدهای آن به صورت زیر می باشد :


package com.kelidestan.sharedpreferences;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

}

کدها را به صورت زیر تغییر می دهیم (افزودن Button برای ارسال کاربر به activity با نام Prefs) :


package com.kelidestan.sharedpreferences;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {
               
                @Override
                public void onClick(View v) {
                        startActivity(new Intent(MainActivity.this, Prefs.class));
                }
        });
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

}

برنامه اندروید آماده است و می توانید آن را به شیوه دلخواه خود، اجرا کنید و نتیجه را ببینید.

با اجرای برنامه اندروید، بر روی یک گوشی، صفحه زیر نمایش داده می شود :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

با اشاره بر روی دکمه (Button)، صفحه زیر نمایش داده می شود :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

بر روی گزینه name کلیک می کنیم تا صفحه زیر باز شود :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

در کادر، نام خود را می نویسیم و سپس بر روی گزینه OK اشاره می کنیم :

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

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

ذخیره اطلاعات و تنظیمات برنامه، با SharedPreferences در برنامه نویسی اندروید

می توانید آن را تغییر بدهید یا بگذارید که همین عبارت، باقی بماند.

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

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