آموزش برنامه نویسی اندروید (Android)
دسته بندی ( ۴۸۲ آموزش )
نمایش دسته بندی ها (۴۸۲ آموزش)
مباحث اولیه، در برنامه نویسی اندروید
مباحث اولیه، در برنامه نویسی اندروید 28
کار با Activity ها ، در برنامه نویسی اندروید
کار با Activity ها ، در برنامه نویسی اندروید 21
طراحی فایل های xml متناظر با Activity ها و ... (لایه گرافیکی Activity ها و ...)، در برنامه نویسی اندروید
طراحی فایل های xml متناظر با Activity ها و ... (لایه گرافیکی Activity ها و ...)، در برنامه نویسی اندروید 11
کار با برنامه Eclipse (یا همان ADT Bundle)، در برنامه نویسی اندروید
کار با برنامه Eclipse (یا همان ADT Bundle)، در برنامه نویسی اندروید 11
خطاهای رایج در برنامه Eclipse و در برنامه نویسی اندروید
خطاهای رایج در برنامه Eclipse و در برنامه نویسی اندروید 10
کار با برنامه Android Studio ، در برنامه نویسی اندروید
کار با برنامه Android Studio ، در برنامه نویسی اندروید 9
خطاهای رایج در برنامه Android Studio و در برنامه نویسی اندروید
خطاهای رایج در برنامه Android Studio و در برنامه نویسی اندروید 3
تبدیل متغیرها و سایر تبدیل ها، در برنامه نویسی اندروید
تبدیل متغیرها و سایر تبدیل ها، در برنامه نویسی اندروید 9
نمایش عکس و کار با ImageView ، در برنامه نویسی اندروید
نمایش عکس و کار با ImageView ، در برنامه نویسی اندروید 23
نمایش متن و کار با رشته ها (strings) و TextView ، در برنامه نویسی اندروید
نمایش متن و کار با رشته ها (strings) و TextView ، در برنامه نویسی اندروید 38
ساخت دکمه (Button) ، در برنامه نویسی اندروید
ساخت دکمه (Button) ، در برنامه نویسی اندروید 7
ساخت لیست (فهرست) با ListView ، در برنامه نویسی اندروید
ساخت لیست (فهرست) با ListView ، در برنامه نویسی اندروید 12
ساخت EditText، در برنامه نویسی اندروید
ساخت EditText، در برنامه نویسی اندروید 6
مجموعه ویدئوهای آموزش طراحی متریال (Material Design)، در برنامه نویسی اندروید
مجموعه ویدئوهای آموزش طراحی متریال (Material Design)، در برنامه نویسی اندروید 13
طراحی متریال (Material Design)، در برنامه نویسی اندروید
طراحی متریال (Material Design)، در برنامه نویسی اندروید 3
پخش موسیقی، در برنامه نویسی اندروید
پخش موسیقی، در برنامه نویسی اندروید 5
نمایش انیمیشن، در برنامه نویسی اندروید
نمایش انیمیشن، در برنامه نویسی اندروید 3
تغییر ویژگی های کلی برنامه اندروید
تغییر ویژگی های کلی برنامه اندروید 3
ذخیره اطلاعات با SharedPreferences ، در برنامه نویسی اندروید
ذخیره اطلاعات با SharedPreferences ، در برنامه نویسی اندروید 2
پایگاه داده (SQLite Database)، در برنامه نویسی اندروید
پایگاه داده (SQLite Database)، در برنامه نویسی اندروید 10
تبادل اطلاعات بین برنامه اندروید و سرور اینترنتی (اینترنت)، در برنامه نویسی اندروید
تبادل اطلاعات بین برنامه اندروید و سرور اینترنتی (اینترنت)، در برنامه نویسی اندروید 21
نمایش یک صفحه اینترنتی یا کدهای HTML (کار با WebView) و ساخت لینک، در برنامه نویسی اندروید
نمایش یک صفحه اینترنتی یا کدهای HTML (کار با WebView) و ساخت لینک، در برنامه نویسی اندروید 8
حلقه ها (for و while و ...)، در برنامه نویسی اندروید
حلقه ها (for و while و ...)، در برنامه نویسی اندروید 2
نمایش پیام به کاربر (Dialog و AlertDialog و Toast و Notification و ...)، در برنامه نویسی اندروید
نمایش پیام به کاربر (Dialog و AlertDialog و Toast و Notification و ...)، در برنامه نویسی اندروید 11
ویژگی های صفحه نمایش و چرخش آن، در برنامه نویسی اندروید
ویژگی های صفحه نمایش و چرخش آن، در برنامه نویسی اندروید 10
به دست آوردن ویژگی های کلی برنامه اندروید، در برنامه نویسی اندروید
به دست آوردن ویژگی های کلی برنامه اندروید، در برنامه نویسی اندروید 4
به دست آوردن ویژگی های گوشی کاربر، در برنامه نویسی اندروید
به دست آوردن ویژگی های گوشی کاربر، در برنامه نویسی اندروید 5
بازی سازی، در برنامه نویسی اندروید
بازی سازی، در برنامه نویسی اندروید 1
به اشتراک گذاری (share)، در برنامه نویسی اندروید
به اشتراک گذاری (share)، در برنامه نویسی اندروید 5
کار با فایل ها و فولدرها در حافظه خارجی (External Storage)، در برنامه نویسی اندروید
کار با فایل ها و فولدرها در حافظه خارجی (External Storage)، در برنامه نویسی اندروید 15
کار با پوشه های raw و assets ، در برنامه نویسی اندروید
کار با پوشه های raw و assets ، در برنامه نویسی اندروید 2
عملیات های ریاضی، در برنامه نویسی اندروید
عملیات های ریاضی، در برنامه نویسی اندروید 13
کار با دوربین (Camera)، در برنامه نویسی اندروید
کار با دوربین (Camera)، در برنامه نویسی اندروید 3
کار با action bar ، در برنامه نویسی اندروید
کار با action bar ، در برنامه نویسی اندروید 4
کار با کلاس ها (class) ، در برنامه نویسی اندروید
کار با کلاس ها (class) ، در برنامه نویسی اندروید 4
کار با package ها ، در برنامه نویسی اندروید
کار با package ها ، در برنامه نویسی اندروید 2
نرم افزارهای شبیه ساز برای اجرای برنامه های اندروید بر روی سیستم عامل کامپیوتر (مثل ویندوز)
نرم افزارهای شبیه ساز برای اجرای برنامه های اندروید بر روی سیستم عامل کامپیوتر (مثل ویندوز) 2
امنیت، در برنامه نویسی اندروید
امنیت، در برنامه نویسی اندروید 1
Thread ها، در برنامه نویسی اندروید
Thread ها، در برنامه نویسی اندروید 3
سرویس ها (Service)، در برنامه نویسی اندروید
سرویس ها (Service)، در برنامه نویسی اندروید 9
BroadcastReceiver ، در برنامه نویسی اندروید
BroadcastReceiver ، در برنامه نویسی اندروید 0
تاریخ و زمان و تمامی موارد مرتبط با زمان (عملیات های زمان بندی شده و ...)، در برنامه نویسی اندروید
تاریخ و زمان و تمامی موارد مرتبط با زمان (عملیات های زمان بندی شده و ...)، در برنامه نویسی اندروید 11
AsyncTask ، در برنامه نویسی اندروید
AsyncTask ، در برنامه نویسی اندروید 2
آرایه ها (Arrays)، در برنامه نویسی اندروید
آرایه ها (Arrays)، در برنامه نویسی اندروید 3
لیست آرایه ای (ArrayList)، در برنامه نویسی اندروید
لیست آرایه ای (ArrayList)، در برنامه نویسی اندروید 6
رنگ ها (Colors)، در برنامه نویسی اندروید
رنگ ها (Colors)، در برنامه نویسی اندروید 3
Fragment ها و Tab بندی، در برنامه نویسی اندروید
Fragment ها و Tab بندی، در برنامه نویسی اندروید 8
معرفی کتابخانه ها (Libraries)، در برنامه نویسی اندروید
معرفی کتابخانه ها (Libraries)، در برنامه نویسی اندروید 1
ساخت ProgressDialog یا ProgressBar برای نمایش میزان پیشرفت اجرای یک سری عملیات، در برنامه نویسی اندروید
ساخت ProgressDialog یا ProgressBar برای نمایش میزان پیشرفت اجرای یک سری عملیات، در برنامه نویسی اندروید 3
نسخه اندروید (Android version) و API level (نسخه API) ، در برنامه نویسی اندروید
نسخه اندروید (Android version) و API level (نسخه API) ، در برنامه نویسی اندروید 1
لرزاندن گوشی (vibrate)، در برنامه نویسی اندروید
لرزاندن گوشی (vibrate)، در برنامه نویسی اندروید 2
پرداخت درون برنامه ای، در برنامه نویسی اندروید
پرداخت درون برنامه ای، در برنامه نویسی اندروید 1
 پروژه های اندروید Open Source کاربران کلیدستان
پروژه های اندروید Open Source کاربران کلیدستان 2
ساخت امکانات جانبی (جستجو، لیست علاقه مندی، لوگو، منو و ...) برای برنامه اندروید
ساخت امکانات جانبی (جستجو، لیست علاقه مندی، لوگو، منو و ...) برای برنامه اندروید 5
مباحث عمومی، در برنامه نویسی اندروید
مباحث عمومی، در برنامه نویسی اندروید 35

استفاده از SharedPreferences برای ذخیره اطلاعات به صورت دائمی (تا هنگام uninstall برنامه)، در برنامه نویسی اندروید

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

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

ابتدا باید در برنامه اندروید، یک کلاس (class) با نام Prefs بسازیم (یک فایل با نام Prefs.java). فایل Prefs.java باید شامل کدهایی مشابه کدهای زیر باشد :


package com.package.name;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class Prefs extends PreferenceActivity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

            String myString = prefs.getString("myStringName", "");
            Boolean myBoolean = prefs.getBoolean("myBooleanName", true);            
    }
}

که در آن، باید نام package را که در خط اول کدها نوشته ایم، به نام package برنامه اندروید خود تغییر بدهید.

اگر در کدها دقت کنید، کلاس Prefs را از توسعه PreferenceActivity ساخته ایم. این مورد، در خط زیر از کدها قابل مشاهده است :


public class Prefs extends PreferenceActivity {

اکنون به دو خط زیر از کدها دقت کنید :


String myString = prefs.getString("myStringName", "");
Boolean myBoolean = prefs.getBoolean("myBooleanName", true);

در این دو خط، دو متغیر تعریف کرده ایم و می خواهیم که دو مقدار را در این دو متغیر ذخیره کنیم. مقادیری که در این دو متغیر ذخیره شود، تا زمانی که کاربر، برنامه اندروید را از گوشی خود حذف نکرده، قابل بازیابی است و از بین نمی روند (قابل خواندن یا تغییر دادن). بنابراین اگر مثلا می خواهید 10 مقدار مختلف را با استفاده از SharedPreferences ذخیره کنید، باید 10 متغیر برای آن 10 مقدار، در این کلاس تعریف کنید. برای تعداد زیاد مقادیر، می توان از یک آرایه استفاده نمود که در انتهای همین مبحث، در مورد آن کمی توضیح خواهیم داد.

متغیر اول را با نام myString و از نوع رشته (String) تعریف کرده ایم و متغیر دوم را با نام myBoolean و از نوع بولین (Boolean) می باشد. نیازی به حفظ کردن این دو نام نیست زیرا در سایر کدها که در activity های برنامه خواهیم نوشت، نیازی به به یاد داشتن آنها نیست، اما دو نامی که درون پرانتزها نوشته شده اند (یعنی myStringName و myBooleanName)، مهم می باشند و بعدا برای تغییر دادن مقدار این متغیرها، باید به آنها ارجاع بدهیم.

دقت کنید که عبارت های دومی که درون پرانتزها نوشته شده است، مقدار پیش فرض برای متغیرها می باشد. یعنی در پرانتز getString مقدار "" را نوشته ایم که به معنای رشته تهی می باشد، بنابراین اگر قبلا برای متغیر myString هیچ مقداری تعیین نکرده باشیم و سپس مقدار آن را از یک activity فراخوانی کنیم، یک رشته تهی به عنوان مقدار آن در نظر گرفته می شود. برای متغیر بولین (Boolean) هم مقدار true را در نظر گرفته ایم و بنابراین به طور پیش فرض، برابر true است (تا زمانی که مقدار دیگری برای آن تعیین نکنیم).

تغییر یک مقدار تعریف شده توسط SharedPreferences :

اکنون فرض کنید که بخواهیم مقدار مربوط به myString را در یک activity تغییر بدهیم (Prefs یک کلاس است که آن را ساخته ایم تا در activity های برنامه اندروید، از آن استفاده کنیم)، برای این منظور، در میان کدهای activity مورد نظر، کد زیر را می نویسیم :


SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
editor.putString("myStringName", "myValue");
editor.apply();

بنابراین عبارت myValue در آن رشته (String) ذخیره خواهد شد. دقت کنید که از putString استفاده کرده ایم.

فرض کنید بخواهیم مقدار متغیر بولین (Boolean) را تغییر بدهیم، برای این منظور، کدهای زیر را می نویسیم :


SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
editor.putBoolean("myBooleanName", false);
editor.apply();

بنابراین مقدار false در آن متغیر بولین (Boolean) ذخیره خواهد شد. دقت کنید که از putBoolean استفاده کرده ایم.

خواندن یک مقدار تعریف شده توسط SharedPreferences :

اگر بخواهیم مقدار ذخیره شده در آن رشته (String) را بخوانیم، باید کدهای زیر را بنویسیم :


SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
String string_from_sp = shared.getString("myStringName", "");

دقت کنید که از getString استفاده کرده ایم. همچنین توجه داشته باشید که در پرانتز getString ، بعد از نام myStringName ، عبارت "" را نوشته ایم که به معنای آن است که اگر در SharedPreferences هیچ متغیری برای نام myStringName یافت نشد، این رشته به جای مقدار مورد نظرمان در نظر گرفته شود (عبارت "" یک رشته تهی است، شما می توانید رشته دیگری را به جای آن بنویسید)(مقدار پیش فرض).

اگر بخواهیم مقدار مربوط به متغیر بولین (Boolean) را بخوانیم، باید کدهای زیر را بنویسیم :


SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
boolean boolean_from_sp = shared.getBoolean("myBooleanName", true);

دقت کنید که از getBoolean استفاده کرده ایم. همچنین توجه داشته باشید که در پرانتز getBoolean ، بعد از نام myBooleanName ، مقدار true را نوشته ایم که به معنای آن است که اگر در SharedPreferences هیچ متغیری برای نام myStringName یافت نشد، مقدار true به جای مقدار مورد نظرمان در نظر گرفته شود (مقدار پیش فرض).

استفاده از آرایه ها برای تعریف تعداد زیادی متغیر :

در کدهای زیر نشان داده ایم که چگونه می توان تعداد زیادی متغیر در کلاس Prefs تعریف نمود :


// String
String [] all_strings = new String [20];
for(int x = 1; x < 21; x++){
    String name = "string_" + String.valueOf(x);
    all_strings [x] = prefs.getString(name, "");
}
                       
// Boolean
Boolean [] all_booleans = new Boolean [30];
for(int x = 1; x < 31; x++){
    String name = "boolean_" + String.valueOf(x);
    all_booleans [x] = prefs.getBoolean(name, false);
}

که در آن، آرایه رشته ای all_strings می تواند تعداد 20 مقدار رشته (String) و آرایه بولین all_booleans می تواند 30 مقدار بولین (Boolean) را در خود ذخیره کند. دقت شود که باید تنها به نام تعریف شده درون پرانتزها دقت کنید تا بعدا هنگام فراخوانی مقدار این متغیرها یا هنگام تغییر مقدار آنها، به این نام ها ارجاع بدهید (همان نکته ای که قبلا تذکر دادیم).

نویسنده علیرضا گلمکانی
شماره کلید 288
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 12 12 0
erfan
۱۳۹۵/۰۵/۱۳
۱۳:۵۴

سلام من از shared preferences برای ذخیره اسم اکتیویتی استفاده کردم اما مشکل اینجاست که وقتی برنامه رو کاملآ میبندم و دوباره اجرا میکنم انگار shared preferences
مقدارش رو از دست داده ...
اینم لینک برا توضیحات بیشتر :
[url=http://stackoverflow.com/questions/38739544/android-shared-preferences-not-working-when-relaunch-app][/url]http://stackoverflow.com/questions/38739544/android-shared-preferences-not-working-when-relaunch-app

سید محمد
۱۳۹۵/۰۵/۲۸
۰۳:۱۰

بسیار عالی.تشکر فراوان از سایت بسیار خوبتون.

phoenix
۱۳۹۶/۰۳/۱۰
۱۷:۱۱

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

من یه برنامه درست کردم که از Bottom Bar توش استفاده کردم و برای فرگمنت آخریم جوری تنظیم کردم که مثلا:

اگر sp خالی بود لایه اول رو نمایش بده و اگر خالی نبود لایه ذوم رو نشون بده. درست و صحیح کار میکنه -> جوری که یه دکمه داخل xml گذاشتم که اگر زده شد sp رو پر کن و اکتیویتی رو recreate کن که بعدش لایه دوم رو نشون میده ...
تا اینجا من مشکلی ندارم و همه چیز ok !

اما مشکل من اینجاست که:

1. توی لایه اول دوتا EditText دارم و میخوام وقتی دکمه زده شد متن داخل اونارو داخل یه string توی sp جداگانه ذخیره کنم و بعد از recreate اون دوتا متن ذخیره شده رو از sp بخونه و توی دوتا TextView نمایش بده که هرکاری میکنم نمیشه.

2. این که بعد اوکی شدن قسمت اول سوالم (قسمت بالا) من دوتا دیالوگ ساختم ک توی هرکدوم یک EditText هستش و بعد وارد کردن اطلاعات اونا رو میخوام جایگزین مقادیر اون دوتا مورد که گفتم کنم و بعد توی sp دخیره کنم.

phoenix
۱۳۹۶/۰۳/۱۰
۲۲:۰۸

با تشکر من با آموزش خوبتون تونستم نیازمو حل کنم...

فقط یسوال آخر من توی برنامم از کاربر عکس میگیرم اما بعد خروج عکس میپره.... اونم میتونم با تغییری توی این کد ها بدست بیارم؟ اگر بله چجوری؟ اگر نه به چه آموزشی مراجعه کنم ؟ ممنون

admin
۱۳۹۶/۰۳/۱۱
۱۳:۲۸

سلام.
باید عکس را در حافظه خارجی (External Storage) ذخیره کنید :

دسته کلید شماره 116

برای مواردی هم که عکس ها در یک آدرس اینترنتی (URL) وجود دارند و می خواهیم تنها یک بار دریافت شوند، کلید زیر را بخوانید :

کلید شماره 2777

Flower

امید میری
۱۳۹۶/۰۵/۲۳
۰۷:۵۲

بسیار عالی

کاملا کار میکنه

امیدی
۱۳۹۶/۱۲/۰۲
۲۱:۴۶

سلام خسته نباشید . ببخشید من یه کلاسی دارم که از BroadcastReceiver ارث بری شده . برای اینکه از shared perfercenes استفاده کنم باید چیکار کنم . چون  getsharedperfercenes رو ارور میده و وقتی از AppCompatActivity ارث بری میکنم ارور برطرف میشه . 

Anonymous
۱۳۹۷/۰۷/۲۵
۲۳:۱۹

سلام می تونید توی متد OnReceive دستوراتتون رو بنویسید و برای اینکه به مشکل نخورید حتما چرخه حیات broadcastreceiver رو بررسی کنید[عکس: smiley_120.png]


کد:
@Override
   public void onReceive(Context arg0, Intent arg1) {
       SharedPreferences prefs = arg0.getSharedPreferences("myPrefs",
                                                       Context.MODE_PRIVATE);
}

رضا
۱۳۹۸/۰۲/۱۲
۱۴:۰۰

سلام
من میخوام یه برنامه بسازم که کاربر وقتی برنامه رو میبنده بعد از اجرای دوباره برنامه از آخرین اکتیویتی که کاربر داخلش بوده برنامه شروع بشه نه از صفحه اول
ممنون میشم کدش رو بهم بدین
به هر کسی که گفتم کمکم نکرده ممنون میشم شما کمک کنید (تازه کارم)

admin
۱۳۹۸/۰۲/۱۳
۰۰:۳۰

سلام.
کلید زیر را بخوانید :

کلید شماره 244

Flower

رضا
۱۳۹۸/۰۲/۱۳
۲۳:۵۷

سلام
متاسفانه کارم رو راه ننداخت
اونی که میخوام با SharedPreferences نوشته میشه ولی نمیدونم چطوری باید اکتیویتی رو باهاش ذخیره کنم که توی اجرای بعد هم از همون جا اجرا بشه (برنامه کامل بسته بشه یا بعد از چند روز اجرا بشه آخرین اکتیویتی که باز بود از اون اکتیویتی برنامه اجرا بشه) ولی متاسفانه SharedPreferences بلد نیستم
ممنون میشم کمک کنید در صورت امکان

محمد
۱۳۹۹/۱۲/۲۱
۱۸:۲۵

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

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)

جستجو در کلیدستان، توسط گوگل

جستجو در عنوان کلیدها

دسترسی سریع

کلید
×

شماره کلید


دسته بندی
×

شماره دسته کلید


جستجو
×

جستجو


کلمات کلیدی

راهنمای کلمات کلیدی (کلاس ها، توابع، عناصر و ...) در برنامه نویسی اندروید، بر اساس حرف اول کلمه کلیدی :

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

developer.android.com