یک فنجان مشاوره
مهـمـان مــا باشیـد

شـمـــاره تــمــاس
031-36628509

Sharedpreferences چیست؟

انتشار 10 بهمن 1397
دیدگاه ها 0
زمان تقریبی مطالعه
گردآوری پدیده تجارت

 

Sharedpreferences یک دیتابیس داخلی است که تا زمانی که اپلیکیشن نصبه وجود دارد.هر Sharedpreferences یک نام دارد و مانند Table عمل میکند، که هر Table شامل چند داده می باشد که بصورت key/value کار می کنند.

ممکن است در یک اپلیکیشن شما از کاربر اطلاعاتی دریافت کنید که نیاز به  ثبت  اون اطلاعات دارید.اگر تعداد داده هایی که میخواهید ذخیره کنید کم باشد مانند اطلاعاتی که کاربر زمان ثبت نام در اپلیکیشن وارد می کند(یوزرنیم،پسورد و…) باید از Sharedpreferences برای ذخیره ی اطلاعات استفاده کنید.ولی اگر تعداد داده ها خیلی زیاد باشد برای ذخیره ی آن ها استفاده از Sharedpreferences کار غلطی است و باید از sqllite استفاده کنید.

ایجاد یک Sharedpreferences

برای پیدا کردن یک داده از Sharedpreferences ابتد باید خود Sharedpreferences را پیدا کنیم سپس داده داخل آن را بخونیم:

SharedPreferences shp = getSharedPreferences("shp_Name" , MODE_PRIVATE);

 

کد بالا، دیتابیس را میگرده و Sharedpreferences به اسم shp_Name را پیدا میکند در صورتی که وجود نداشت، یک Sharedpreferences به این اسم میسازد.

حالا می خواهیم به داده های داخل این Sharedpreferences دست پیدا کنیم، برای این کار به دو چیز نیاز داریم، یکی نوع داده

(String،int،booleanو…) و دیگری نام داده (key):

shp.getString("user_name" ,"NOTHING");

 

کد بالا داخل shp، دنبال  داده ای از نوع String و با نام user_name می گردد،اگر چنین داده ای وجود داشت مقدار آن(value) را برمی گرداند و اگر وجود نداشت مقدار NOTHING را برمی گرداند.

ممکن است بخواهید داده های داخل shp را ویرایش کنید یا داده های جدیدی به آن اضافه کنید.برای این کار نیاز به editor داریم، پس باید یک editor ایجاد کنیم و به کمک آن داده ها را ویرایش کنیم یا داده ی جدیدی ایجاد کنیم:

;()SharedPreferences.Editor editor = shp.edit
;()editor.putInt("password" , 1234).apply

در کد بالا ابتدا یک editor ایجاد کردیم حالا به کمک این editor داخل shp را چک می کنیم ، اگر داده ای با نام password وجود داشت ، مقدار آن را به 1234 ویرایش می کنیم و اگر وجود نداشت یک داده با نام password و مقدار 1234 ایجاد کرده ایم.

برای اینکه Editor اعمال شود باید آن را ()applyکنیم.

نمونه ای از  Sharedpreferences  

می خواهیم وقتی اپلیکیشن برای اولین بار باز می شود کاربر، یوزرنیم و پسورد خود را وارد کند و از دفعات بعدی که وارد اپ می شود یوزرنیم و پسورد بهش نشان داده شود.

کدxml

یک اکتیویتی ایجاد کرده و داخل xml آن کد زیر را وارد کنید:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">


    <EditText
        android:id="@+id/edt_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="username"
        android:textSize="18sp"/>

    <EditText
        android:id="@+id/edt_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password"
        android:textSize="18sp"
        android:layout_marginTop="10dp"/>

    <Button
        android:id="@+id/btn_register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ثبت اطلاعات"
        android:textSize="18sp"
        android:layout_marginTop="30dp"/>

</LinearLayout>

در کد بالا دو EditText  برای یوزرنیم و پسورد و یک Button برای ثبت اطلاعات ایجاد کردیم.

کد جاوا

حالا داخل کد جاوای اکتیویتی، کد زیر را وارد کنید:

import android.content.SharedPreferences;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class ShpActivity extends AppCompatActivity {

    EditText edt_username, edt_password;
    Button btn_register;

    SharedPreferences shp;
    static final String shp_Name = "shp_UserName";

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

        edt_username = findViewById(R.id.edt_username);
        edt_password = findViewById(R.id.edt_password);
        btn_register = findViewById(R.id.btn_register);

        shp = getSharedPreferences(shp_Name, MODE_PRIVATE);

        edt_username.setText(shp.getString("username", ""));
        edt_password.setText(shp.getString("password", ""));


        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String username = edt_username.getText().toString();
                String password = edt_password.getText().toString();

                if (username.isEmpty() || password.isEmpty()) {
                    Toast.makeText(ShpActivity.this, "لطفا فیلدهای بالا را پر کنید", Toast.LENGTH_SHORT).show();

                } else {

                    SharedPreferences.Editor editor = shp.edit();
                    editor.putString("username", username).apply();
                    editor.putString("password", password).apply();

                    Toast.makeText(ShpActivity.this, "اطلاعات ثبت شد", Toast.LENGTH_SHORT).show();
                    
                }
            }
        });
    }

}

 

توضیح کد بالا:

ابتدا دو EditText ، یک Button، یک Sharedpreferences و یک String (نام Sharedpreferences) تعریف کرده ، سپس EditText ها و Button را findViewById و shp را مقدار دهی می کنیم.

مقدار داده ها را از shp گرفته و برای EditText ها ست می کنیم:

edt_username.setText(shp.getString("username", ""));
edt_password.setText(shp.getString("password", ""));

اگر برای اولین باراپلیکیشن باز شود، این داده ها هنوز مقدار دهی نشدند و برای دو EditText هیچ مقداری ست نمی شود و اگر برای اولین بار نیست، مقادیر username و password از shp گرفته شده و داخل EditText ها ست می شوند.

حالا برای Button متد onClick می نویسیم به اینصورت که وقتی کاربر روی دکمه کلیک کرد، مقادیر را از EditText ها گرفته و آن ها را داخل متغیرهایی بنام username و password ذخیره کند:

String username = edt_username.getText().toString();
String password = edt_password.getText().toString();

 

حالا این مقادیر را چک می کنیم ، اگر خالی بودند پیغامی با عنوان “لطفا فیلدهای بالا را پر کنید” نشان داده شود و در غیر اینصورت مقادیر را گرفته و داخل shp ذخیره کند و پیغامی با عنوان “اطلاعات ثبت شد” نشان داده شود:

if (username.isEmpty() || password.isEmpty()) {
    Toast.makeText(ShpActivity.this, "لطفا فیلدهای بالا را پر کنید", Toast.LENGTH_SHORT).show();

} else {

    SharedPreferences.Editor editor = shp.edit();
    editor.putString("username", username).apply();
    editor.putString("password", password).apply();


    Toast.makeText(ShpActivity.this, "اطلاعات ثبت شد", Toast.LENGTH_SHORT).show();

}

خروجی پروژه

وقتی برای اولین بار پروژه را ران کنید و روی دکمه کلیک کنید ، صفحه ی زیر را میبینید:

 

حالا فیلد ها را پر کنید و روی دکمه کلیک کنید:

 

اپلیکیشن را ببندید و دوباره باز کنید:

می بینید که اطلاعاتی که بار اول ذخیره کردید وجود دارد.حالا اگر این مقادیر را ویرایش کنید و دکمه ی ثبت اطلاعات را بزنید مقادیر username و password داخل  shp ویرایش شده و مقادیر جدید جایگزین می شود و از این به بعد داخل EditText ها مقادیر جدید نشان داده می شود. همچنین  اگر اپ را لغو نصب کنید و دوباره نصب کنید اطلاعات از بین رفته و shp از نو ساخته می شود.

 

نویسنده: الهه ابراهیمی

مقالات مرتبط

شاید علاقمند به دیدن این مقالات نیز باشید
(آرشیو کامل)

آموزش تخصصی Vue.js اصفهان آموزش تخصصی Vue.js اصفهان مقالات طراحی وب سایت

پدیده تجارت

25 شهریور 1398

چگونه یک وبسایت فروشگاهی موفق داشته باشیم؟ چگونه یک وبسایت فروشگاهی موفق داشته باشیم؟ مقالات تجارت الکترونیک

پدیده تجارت

01 آبان 1396

گوگل آنالتیکس چیست؟ گوگل آنالتیکس چیست؟ مقالات سئو

پدیده تجارت

06 آبان 1396

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

پدیده تجارت

23 فروردین 1399

طراحی سایت با اینستاگرام ؟ کدام یک برای کسب و کار طراحی سایت با اینستاگرام ؟ کدام یک برای کسب و کار مقالات طراحی وب سایت

پدیده تجارت

24 اسفند 1400

اصول و تکنیک های متقاعدسازی اصول و تکنیک های متقاعدسازی مقالات برندینگ

پدیده تجارت

14 فروردین 1401

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

پدیده تجارت

31 مرداد 1398

Toggle Button چیست و چگونه پیاده سازی می شود؟ Toggle Button چیست و چگونه پیاده سازی می شود؟ مقالات موبایل

پدیده تجارت

21 خرداد 1397

مزایای کسب درآمد آنلاین مزایای کسب درآمد آنلاین مقالات تجارت الکترونیک

پدیده تجارت

28 مهر 1392

چگونه یک پروپزال طراحی سایت مناسب تهیه کنیم؟ چگونه یک پروپزال طراحی سایت مناسب تهیه کنیم؟ مقالات طراحی وب سایت

پدیده تجارت

12 شهریور 1396

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

پدیده تجارت

02 مهر 1393

تایپو گرافی چیست؟ تایپو گرافی چیست؟ مقالات

پدیده تجارت

06 آبان 1396

دیدگاه کاربران

0

0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها