آموزش کامل SharedPreferences در اندروید استودیو ( ذخیره فایل در اندروید )

 آموزش کامل SharedPreferences در اندروید استودیو و کاربرد آن :

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

کاربرد SharedPreferences در اندروید چیست؟

Shared Preferences اندروید روشی است که به وسیله آن می توانید مقادیر کمی از داده های اولیه را درون یک فایل XML  در حافظه دستگاه اندرویدی ذخیره و بازیابی کنید و به عنوان یک پایگاه همیشگی برای این دادهای ساده مورد استفاده قرار می گیرد.

از Shared Preferences اندروید می توان برای ذخیره تنظیمات برنامه (مانند فونت، رنگ، تم)، ثبت اطلاعات ورود کاربر(مانند لاگین و لاگ اوت)، نمایش و چیدمان لیست ها، فعال یا غیرفعال بودن دریافت نوتیفیکشن ها، و … استفاده کرد.

آموزش کامل SharedPreferences در اندروید استودیو - ذخیره فایل در اندروید استودیو - ذخیره اطلاعات در اندروید استودیو

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

  • سرعت بسیار بالا و حجم پایین
  • ذخیره اطلاعات کوچک بدون نیاز به دیتابیس جداگانه
  • سازگاری با تمام نسخه های اندروید و کدنویسی ساده و راحت

سوال اکثر کاربران : چگونه به صورت اصولی باید از SharedPreferences استفاده کنیم؟

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

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

مراحل ذخیره اطلاعات با sharedpreferences در اندروید


مرحله اول ساخت پروژه کار با SharedPreferences در اندروید استودیو : 

به منظور شروع کار برای ذخیره فایل در اندروید استودیو، یک پروژه جدید در اندروید استودیو ایجاد می کنیم (من نام پروژه را SharedPref گذاشتم). توجه کنید که سورس کامل این پروژه در پایین همین مقاله برای دانلود قرار گرفته است. مقادیر درون فولدر values را مانند سورس تغییر دهید (استایل و رنگ ها). بعد از اضافه کردن آیکون ها و تصاویر مربوطه در پوشه drawable لایه activity_main.xml را به صورت زیر کدنویسی و طراحی می کنیم:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:background="@color/colorPrimary"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/txtName"
                android:gravity="center"
                android:textColor="#ffffff"
                android:textSize="16sp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </RelativeLayout>

    </android.support.v7.widget.Toolbar>

    <EditText
        android:id="@+id/edtName"
        android:layout_margin="20dp"
        android:hint="نام خود را وارد کنید ..."
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/btnSave"
        android:textSize="20sp"
        android:text="ذخیره"
        android:textColor="@color/white"
        android:background="@color/colorAccent"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <RelativeLayout
        android:layout_marginTop="50dp"
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="50dp">

        <TextView
            android:id="@+id/txtView"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:text="تنظیمات"
            android:textColor="#000"
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <ImageView
            android:src="@drawable/ic_settings"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/txtView"
            android:layout_marginRight="5dp"
            android:layout_width="40dp"
            android:layout_height="40dp"/>

    </RelativeLayout>

    <View
        android:layout_margin="20dp"
        android:background="@color/colorAccent"
        android:layout_width="match_parent"
        android:layout_height="1dp"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="60dp">

        <Button
            android:id="@+id/btnPurple"
            android:textColor="#ffffff"
            android:textSize="20sp"
            android:text="تم بنفش"
            android:background="@color/purplePrimary"
            android:layout_marginRight="5dp"
            android:layout_marginLeft="10dp"
            android:layout_weight="0.5"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

        <Button
            android:id="@+id/btnBlue"
            android:text="تم آبی"
            android:textColor="@color/white"
            android:textSize="20sp"
            android:background="@color/colorAccent"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="10dp"
            android:layout_weight="0.5"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

    </LinearLayout>

    <TextView
        android:textColor="#000"
        android:textSize="20sp"
        android:layout_margin="20dp"
        android:text="تغییر سایز فونت"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <android.support.v7.widget.AppCompatSeekBar
        android:id="@+id/seekbar"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

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

آموزش کامل SharedPreferences

مرحله دوم ساخت پروژه کار با SharedPreferences در اندروید استودیو : 

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

package com.elecomco.sharedpref;

import android.content.SharedPreferences;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.AppCompatSeekBar;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private LinearLayout linearMain;
    private Toolbar toolbar;
    private EditText edtName;
    private TextView txtName;
    private Button btnSave, btnBlue, btnPurple;
    private AppCompatSeekBar seekBar;

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

        findView();
        getColor();
        seekBarSetting();

        SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE);

        txtName.setText(preferences.getString("text", ""));

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
        {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
            {
                SharedPreferences changeprogress = getSharedPreferences("progress",MODE_PRIVATE);
                SharedPreferences.Editor editor = changeprogress.edit();
                editor.putInt("seekbar",progress);
                editor.commit();
                txtName.setTextSize((float)progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar)
            {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar)
            {

            }
        });

        btnSave.setOnClickListener(this);
        btnBlue.setOnClickListener(this);
        btnPurple.setOnClickListener(this);

    }

    public void findView() {
        linearMain =  findViewById(R.id.linearMain);
        toolbar =  findViewById(R.id.toolbar);
        edtName =  findViewById(R.id.edtName);
        txtName =  findViewById(R.id.txtName);
        btnSave =  findViewById(R.id.btnSave);
        btnBlue =  findViewById(R.id.btnBlue);
        btnPurple =  findViewById(R.id.btnPurple);
        seekBar =  findViewById(R.id.seekBar);
    }

    public void getColor() {
        SharedPreferences changeTheme = getSharedPreferences("theme",MODE_PRIVATE);
        boolean b = changeTheme.getBoolean("color",false);

        if (b)
        {
            toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.purplePrimary));
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().setStatusBarColor(ContextCompat.getColor(getApplicationContext(),R.color.purpleDark));
            }
            linearMain.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.light));

        }
        else
        {
            toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.colorPrimary));
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().setStatusBarColor(ContextCompat.getColor(getApplicationContext(),R.color.colorPrimaryDark));
            }
            linearMain.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.white));
        }
    }

    public void seekBarSetting() {
        SharedPreferences changeprogress = getSharedPreferences("progress",MODE_PRIVATE);
        int i =changeprogress.getInt("seekbar",0);
        int size =changeprogress.getInt("seekbar",25);
        txtName.setTextSize((float)size);
        seekBar.setProgress(i);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btnSave:
                saveName();
                break;
            case R.id.btnBlue:
                saveThemeBlue();
                break;
            case R.id.btnPurple:
                saveThemePurple();
                break;
                default:
        }

    }

    public void saveName(){
        SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("text", edtName.getText().toString());
        editor.commit();
        txtName.setText(edtName.getText().toString());
    }

    public void saveThemeBlue(){
        SharedPreferences changeTheme = getSharedPreferences("theme",MODE_PRIVATE);
        SharedPreferences.Editor editor = changeTheme.edit();
        editor.putBoolean("color",false);
        editor.commit();
        recreate();
    }

    public void saveThemePurple(){
        SharedPreferences changeTheme = getSharedPreferences("theme",MODE_PRIVATE);
        SharedPreferences.Editor editor = changeTheme.edit();
        editor.putBoolean("color",true);
        editor.commit();
        recreate();
    }

}

توضیحات کدهای این پروژه :

برای کار با SharedPreferences و ذخیره اطلاعات در اندروید با حجم پایین در این کلاس، ابتدا باید یک آبجکت از این کلاس بسازیم. در سازنده این کلاس برای پارامتر اول یک نام اختیاری انتخاب کرده و پارامتر دوم آنرا روی MODE_PRIVATE قرار می دهیم.

کلاس SharedPreferences.Editor برای ویرایش اطلاعات می باشد. به عنوان مثال ما برای لاگین کردن و یا حروج از حساب کاربری باید وضعیت را ویرایش کنیم و اطلاعات آخرین وضعیت کاربر را نگهداری کنیم. مثلا در اینجا توسط AppCompatSeekBar فونت مربوط به متن درون تولبار را تغییر داده و درست همزمان با تغییر فونت اطلاعات ویرایشگر مربوط به SharedPreferences را نیز تغییر می دهیم تا آخرین وضعیت تغییر همواره نگهداری و ذخیره شود .

آبجکتی که از کلاس SharedPreferences.Editor ساخته می شود توسط توابع put و commit ویرایش و اجرا می شود. ما در اینجا از 3 تابع findView ، getColor و seekBarSetting استفاده کرده ایم . تابع findView که کارش مشخص است. در زیر به توضیح توابع getColor و seekBarSetting می پردازیم.

تابع getColor :
در این تابع توسط یک مقدار boolean آخرین وضعیت SharedPreferences را ذخیره می کنیم. همچنین با زدن دکمه های آبی و بنفش حالت را تغییر می دهیم. و به راحتی تم برنامه را تغییر می دهیم. آخرین وضعیت در changeTheme که یک آبجکت از کلاس SharedPreferences است ذخیره می شود. در توابع saveThemeBlue و saveThemePurple از این کلاس استفاده می کنیم. برای تغییر رنگ بک گراند تولیار از تابع setBackgroundColor و همچنین برای تغییر رنگ بک گراند استاتوس بار از تابع setStatusBarColor استفاده می کنیم. برای تغییر بک گراند کل صفحه نیز از تابع setBackgroundColor استفاده می شود که در اینجا روی LinearLayout اعمال شده است. در توابع saveThemeBlue و saveThemePurple در انتها از دستور recreate استفاده کرده ایم که در واقع فرم را رفرش کرده و باعث می شود در همان لحظه تغییرات را مشاهده کنیم و همچنین آخرین وضعیت ذخیره شده و با خروج از برنامه و ورود مجدد از بین نمی رود.

تابع saveName :
کدهای درون این تابع نیز که کاملا واضح و گویا می باشد. در دوره صفر تا صد اندروید مثال های فراوانی از SharedPreferences در اندروید زده شده است. از کارهای ساده گرفته تا تغییر تم برنامه به صورت کامل و همچنین لاگین کردن و لاگ اوت کردن کاربر با کدنویسی سمت سرور و نگهداری آخرین وضعیت مانند برنامه های واتس اپ و تلگرام. و انجام بسیاری مثال های کاربردی دیگر.

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

آموزش کامل SharedPreferences در اندروید استودیو را با کلمات کلیدی زیر نیز می توانید دنبال کنید :

ذخیره و بازیابی اطلاعات در برنامه نویسی اندروید – ذخیره آرایه در sharedpreferences – ذخیره اطلاعات در اندروید استودیو – Preferences چیست – Sharedpreferences در اندروید – ذخیره و بازیابی اطلاعات در برنامه نویسی اندروید – ذخیره اطلاعات با sharedpreferences در اندروید – ذخیره اطلاعات در اندروید استودیو – Preference در اندروید – آموزش sharedpreferences در اندروید استودیو – ذخیره آرایه در sharedpreferences – آموزش کامل sharedpreferences – ذخیره فایل در اندروید استودیو – Shared preferences در اندروید – اندروید shared preference

سوالات و نظرات خود را در این بخش مطرح کنید

avatar
فهرست