استفاده از SharedPreferences در اندروید

یکشنبه 17 آبان 1394

در این مقاله می خواهیم در مورد sharedpreferences صحبت کنیم، اینکه چه کاربردی دارد و چه مواقعی از آن استفاده می نمایند.

استفاده از SharedPreferences  در اندروید

اگر سیستم ورود کاربران به سایت را دیده باشید یک Checkbox دارد  "به نام مرا به خاطر بسپار"که شما با زدن آن می توانید اطلاعات خود را به صورت ذخیره شده داشته باشید.

با استفاده از shared Preferences می توانید اطلاعات تنظیمات نرم افزار را مداوم ذخیره نمایید.

تا زمانی که application مورد نظر نصب شده است اطلاعات شما ثبت خواهد شد به محض پاک کردن application اطلاعات قبلی پاک خواهد شد.

اغلب در تنظیمات گوشی مثل حالت روز و شب یا اندازه ی فونت و اندازه ی فاصله بین متن ها برای ذخیره ی موقت از اsharedpreferences استفاده می کنند.

اگر برنامه را ببندید و دوباره باز نمایید همان اطلاعات ذخیره خواهد شد، تا زمانی که اطلاعات را تغییر ندهید همان اطلاعات باقی خواهد ماند.

SharedPreferences ها اجازه ی ذخیره ی انواع داده ها را می دهد.مثل Boolean,float,int,long,string

getSharedPreferences(): این متد برای ذخیره ی اطلاعات استفاده می شود.

getPreferences(): برای نمایش اطلاعات ذخیره شده استفاده خواهد شد.

یک پوشه ی جدید به نام shared_prefs بسازید و یک فایل xml جدید ایجاد نمایید.

داخل shared preferences از چند متد استفاده می کنیم. ولی در اینجا از putstring() وputboolean استفاده می نماییم.

putBoolean(), putInt(), putFloat(), putString()

private SharedPreferences savePreferences;  
private SharedPreferences.Editor savePrefsEditor;  
savePreferences = getSharedPreferences("savePrefs", 0);  
savePrefsEditor = savePreferences.edit();  
  
//If remember me checkbox is checked  
if (saveDetailsCheck.isChecked()) {  
    //Set the data  
    savePrefsEditor.putBoolean("saveLogin", true);  
    savePrefsEditor.putString("username", username);  
    savePrefsEditor.putString("password", email);  
    //Commit the changes  
    savePrefsEditor.commit();  
    Toast.makeText(getApplicationContext(), "Your details have been saved.", Toast.LENGTH_LONG).show();  
} 

برای واکشی اطلاعات می توان به صورت مستقیم از shared preferences استفاده کرد بدون استفاده از SharedPreferences.Editor متد ها ی آن هم به صورت زیر خواهد بود:

getBoolean(), getFloat(), getInt(), getLong(), getString()

private Boolean saveLogin;  
saveLogin = savePreferences.getBoolean("saveLogin", false);  
if (saveLogin == true)  
{  
   UserName.setText(savePreferences.getString("username", ""));  
   Email.setText(savePreferences.getString("password", ""));  
   saveDetailsCheck.setChecked(true);  
} 

کد بالا 2 متدی هستند که اولین بار نام را می گیرد، دومین بار مقدار پیش فرض را بر می گرداند، اگر preference موجود نباشد.

برای پاک کردن Shared Preferences از کد زیر استفاده می کنیم:

savePrefsEditor.clear();  
savePrefsEditor.commit(); 

کد activity  به صورت زیر خواهد بود:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="مرجع تخصصی برنامه نویسان" android:padding="20dp" android:layout_gravity="right"/>
    <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="60dp"
            android:ems="10"
            android:hint="نام کاربری" android:layout_gravity="right" android:gravity="right"></EditText>
    <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText1"
            android:layout_below="@+id/editText1"
            android:layout_marginTop="26dp"
            android:ems="10"
            android:hint="آدرس ایمیل" android:layout_gravity="right" android:gravity="right"/>
    <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText2"
            android:layout_below="@+id/editText2"
            android:layout_marginTop="34dp"
            android:text="ذخیره اطلاعات" android:layout_gravity="right"/>
    <CheckBox
            android:id="@+id/checkBox1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/editText2"
            android:layout_below="@+id/editText2"
            android:text="مرا به خاطر بسپار" android:layout_gravity="right" android:layout_margin="10dp"/>
</LinearLayout>

که از یک EditText, TextView, Button, checkbox استفاده شده است.

حالا کد کلاس جاوا به صورت زیر خواهد بود:


import android.app.Activity;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MyActivity extends Activity {
    EditText UserName, Email;
    Button Save;
    String username;
    String email;
    private CheckBox saveDetailsCheck;
    private SharedPreferences savePreferences;
    private SharedPreferences.Editor savePrefsEditor;
    private Boolean saveLogin;
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        UserName = (EditText) findViewById(R.id.editText1);
        Email = (EditText) findViewById(R.id.editText2);
        Save = (Button) findViewById(R.id.button1);

        saveDetailsCheck = (CheckBox) findViewById(R.id.checkBox1);

        savePreferences = getSharedPreferences("savePrefs", 0);
        savePrefsEditor = savePreferences.edit();

        saveLogin = savePreferences.getBoolean("saveLogin", false);
        if (saveLogin == true)

        {
            UserName.setText(savePreferences.getString("username", ""));
            Email.setText(savePreferences.getString("password", ""));
            saveDetailsCheck.setChecked(true);
        }

        Save.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                username = UserName.getText().toString();
                email = Email.getText().toString();

                if (saveDetailsCheck.isChecked()) {
                    savePrefsEditor.putBoolean("saveLogin", true);
                    savePrefsEditor.putString("username", username);
                    savePrefsEditor.putString("password", email);
                    savePrefsEditor.commit();
                    Toast.makeText(getApplicationContext(), "اطلاعات شما با موفقیت ذخیره شد", Toast.LENGTH_LONG).show();

                } else {

                    savePrefsEditor.clear();
                    savePrefsEditor.commit();

                }
            }
        });
    }

}

ابتدا کنترل های استفاده شده تعریف شده اند، و از متد getboolean استفاده شده است، اگر true باشد نام کاربری و کلمه ی عبور ذخیره خواهد شد، و checkbox باید true باشد.

حالا برای ذخیره ی اطلاعات باید چک کنیم که اگر checkbox مورد نظر تیک خورده باشد، نام کاربری و کلمه ی عبور به صورت موقت ذخیره شود.

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

در آخر یک پیغام به صورت Toast نمایش داده خواهد شد.

خروجی به صورت زیر خواهد بود:

 

 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید