آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کسی میتونه shared preference رو به زبان ساده توضیح بده لطفا ؟ (حل شد)

alfredo  8 سال پیش  8 سال پیش
+2 0

سلام دوستان

من یک ماهه میخوام یک صلوات شمار بسازم تا عملی برنامه نویسی یاد بگیرم. ساخت صلوات شمار خیلی ساده هست ولی ذخیره مقدار شمارش شده خیلی سخته. (من میخوام یک enteger یا همون int رو با شیر پریفرنس ذخیره کنم.)

توی سایت سرچ کردم و هرچی مثال دیدم از sharedpreferences  از هیچ کدوم نمیتونم سر در بیارم.

توی سایتهای دیگه هم دارم از اول سال سرچ میکنم و میخونم آموزش ها و مثال هاشون رو ولی نمیتونم متوجه بشم.

همشون ذخیره string و boolean رو توضیح دادند و مشکل اینجاست که هر کسی که اومده مثال زده، مثالش با بقیه فرق میکنه و به صد مدل sharedpreference رسیدم که گیج تر شدم.

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

هر کدوم هم که کپی میکنم کار نمیکنه !

توی آموزش های استاد هم preferences بود و  sharedpreferences پیدا نکردم.

اگه کسی میتونه به زبان ساده توضیح بده که چطور کار میکنه، من دستش رو میبوسم.

 

این کد اکتیویتی هستش:

 

 package alfredo.uzumaki.app;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class salavatActivity extends Activity {

    protected int i;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button butt = (Button) findViewById(R.id.butt);
        final TextView monitor = (TextView) findViewById(R.id.monitor);

        butt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                i++;

                monitor.setText(i + "");

            }

        });

 

 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
Hamedmtn  8 سال پیش
+1 0

شما اول یه شی از shared preferences میسازی، بعد باید از طریق اون یه کلید با value مورد نظر خود را داخل اون ذخیره و در جای مورد نظر اونو استخراج و در متغییر ذخیر کنید.

 

 

0 0
خیلی ممنونم از پاسختون ولی خیلی کلی گفتید، اینطوری متوجه نمیشم. (8 سال پیش)
پاسخ به سوال 
alfredo  8 سال پیش
0 0

برای مثال یکی از روش هایی که توی اینترنت به نظرم ساده اومد این بود:

 

اومدم بعد از sec content view این کد رو اظافه کردم: 

 SharedPreferences mSettings = getSharedPreferences("Settings", 0);

        SharedPreferences.Editor editor = mSettings.edit();

        final int i = mSettings.getInt("", i);

بعد آخر کدهای دکمه شمارنده این کد رو اظافه کردم:

editor.putInt("i", i);

                editor.commit();

 

ولی نمیدونم چرا این کارهارو کردم و نمیدونم چرا جواب نمیگیرم. 

لطفا یکی خیلی با جزئیات توضیح بده :(

 
پاسخ به سوال 
Mahdi.Esb  8 سال پیش
+5 0

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

اول ببینیم کلید چیه : کلید یه رشتست که ما با استفاده از اون میتونیم مقادیر توی حافظه ی دستگاه رو صدا بزنیم

خوب دقت کنید :

اول ما یک shared prefrence میسازیم :

SharedPreferences shp = getSharedPreferences("کلید شما", MODE_PRIVATE);

خوب توی این پریفرنس ما میتونیم یسری متغیر تعریف کنیم که اون متغیر ها هم یسری کلید دارن .

خوب همونطور که میبینید به جای "کلید شما" میتونید اسم کلید مورد نظرتونو وارد کنید مثلا "salavat"

پس از این به بعد همیشه میتونید به استفاده از این کلید به پریفرنس مورد نظرتون دسترسی پیدا کنید که توش ممکنه صدها متغیر داشته باشه .

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

حالا نوبت اینه که یه متغیر تغریف کنیم که مقادیر رو از پریفرنس مورد نظر ما بگیره

int Salavat = shp.getInt("کلید متغیر شما" , yek addad  );

اینجا به جای کلید یک رشته وارد میکنید و بجای yek addad یه عدد دلخواه وارد میکنید که در صورتی که پریفرنس مورد نظر به مشکل خورد یا هنوز وجود نداشت اون عدد رو برگردونه شما میتونید صفر وارد کنید چون اگه پریفرنس هنوز ساخته نشده باشه پس حتما کاربر بار اولشه و هنوز مقداری وارد نکرده دیگه  :))

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

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

برای ادیت کردن این پریفرنس به این صورت عمل کنید :

SharedPreferences.Editor shpE=shp.edit();

در اینجا ما با یک متغیر تعریف کردیم که shp یا پریفرنس ما رو ادیت میکنه .

shpE.putInt("کلید متغیر شما", yek addad);
shpE.commit();

در اینجا ما با استفاده از shpE پریفرنسمونو ادیت میکنیم پس کلید برای این موقع به درد میخوره که متغیرامونو از تو پریفرنس صدا بزنیم  نکته دیگه اینکه برای ادیت باید دستور commit رو وارد کنیم تا کار مارو انجام بده


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

 

موفق باشی

0 0
آقا خدا خیر ویژه ای به شما عطا کنه که خیلی دقیق توضیح دادید. ولی من سه تا چیز رو متوجه نمیشم. 1- هر کدوم از این کدها رو کجای کدهای خودم باید استفاده کنم دقیقا ؟ 2- متغیر من کلید نداره. من اومدم بعد از public class salavatActivity نوشتم protected int i; بعدش توی setonclick listener نوشتم : i++; monitor.setText(i + ""); مونیتور همون آیدی تکست ویو هست. خلاصه هم مقدار و هم کلید متغیرم همون i هست به تنهایی. 3- معنی رشته چیه ؟ آیا با متغیر فرق میکنه ؟ ببخشید تروخدا من صفرم و خیلی گیج هستم :( (8 سال پیش)
+1 0
دوست عزیز لطفا اگه مشکل دیگه ای داشتی بگو (8 سال پیش)
پاسخ به سوال 
Mahdi.Esb  8 سال پیش
+3 0

منظور از رشته همون string هستش یعنی متن که بین دو تا " قرار میگیره

بخش اولو که shared prefrence هستش باید موقع فراخوانی عدد هاتون از حافظه بنویسید یعنی اول پریفرنس رو تعریف میکنید بعد متغیر های اون پریفرنس رو تعریف میکنید و بعد اون عدد های پریفرنسار توی متغیر  که تعداد صلواتاست میریزید پس باید برای اولین دستور برنامه بنویسید :

SharedPreferences shp = getSharedPreferences("کلید شما", MODE_PRIVATE);

i
= shp.getInt("kilide moteghayer" , 0 );

با اینکار برنامه اول یا تعداد اعداد رو از حافظه میگیره یا اگه وجود نداشته باشه یکی میسازه و عدد صفر رو بر میگردونه . متغیر i رو هم که قبلش تعریف کرده بودید

 

سوال دومتون : ببینید منظور از کلید یه رشتست که با اون ما عدد هامون رو از حافظه فراخوانی میکنیم یچیزی میمونه مثل اسم یه نفر ما برای اینکه حرفیو به کسی بگیم باید اول اسمشو بگیم دیگه! اینم همونه باید یه اسم براش انتخاب کنیم که دفعه های بعدی با اون اسم صداش بزنیم پس متغیر من کلید نداره اصلا معنی نمیده جون باید یه اسم داشته باشه که صداش بزنی

خوب شما برای ذخیره تنها کاری که باید بکنید بعد از i++ باید بنویسید :

shpE.putInt("کلید متغیر شما", i);

shpE.commit();

حالا اونجا منظور از i اون متغیر i هستش که شما تعریف کردید

0 0
خوب الآن من کلا یک متغیر دارم که اون هم i هست، اگه بخوام براش کلید تعریف کنم باید بنویسم مثلا salavat = i ؟ درسته؟ (8 سال پیش)
پاسخ به سوال 
alfredo  8 سال پیش
+1 0

الآن این شد :

 
public class salavatActivity extends Activity {

   protected int i;
    int           salavat = 0 + i;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final SharedPreferences shp = getSharedPreferences("salavat", MODE_PRIVATE);

        i = shp.getInt("salavat", 0);

        Button butt = (Button) findViewById(R.id.butt);
        final TextView monitor = (TextView) findViewById(R.id.monitor);

        butt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                i++;

                monitor.setText(i + "");
                SharedPreferences.Editor shpE = shp.edit();
                shpE.putInt("salavat", i);

                shpE.commit();


            }

        });

    }
}

 

و بالاخره کار کرد !

آقا دمت گرم، خدا خیرت بده.

میشینم حسابی مطالعه میکنم این کد رو تا قشنگ متوجه بشم.

مدیونتم !

0 0
(8 سال پیش)
0 0
(8 سال پیش)
+1 0
داداش همه چیر درسته فقط اینکه هدفت از تعریف کردن متغیر salavat چیه؟ خود متغیر i رو استفاده کن (8 سال پیش)
0 0
مشکلم این بود که متغیر i خودش بود و خودش، کلید نداشت که معرفیش کنم. من کلا مبحث کلید و مقدار رو زیاد خوب متوجه نشدم، مثلا میبینم تو کدهای دیگران، یک سری کد و دستور که همه به هم ربط دارند رو استفاده کردند بدون اینکه یکجا این هارو به هم ربط بدند، مثلا بگن آی = فلان .... یهو طرف یه مشت کد نوشته که آی و متغیرهای دیگش وسط کد هاست و من متوجه نمیشم کجا اومدن یک کلید تعریف کردن و کجا بهش مقدار دادند و مثلا در این خط از کدها کدوماش کلیده و کدوماش دستوره !؟ کدوماش فعله و کدوماش فاعله؟ کدوماش مربوط به کدهای برنامه نویسیه و کدوماش اسمه که طرف خودش گذاشته ؟ اینها خیلی برام گنگه، بارها هم نشستم از اول آموزش های استاد رو دیدم ولی حس میکنم خوب نمیتونم با آموزش های استاد ارتباط برقرار کنم، هر کدومو هفت هشت بار میبینم باز هم برام خیلی چیزا گنگه ! البته اشکال از خودم هم هست، چون تا متوجه نشم این کدی که مینویسم معنیش چیه، هیچوقت نمیتونم یاد بگیرمش. یعنی من اصلا قابلیت حفظ کردن ندارم، فقط میتونم یاد بگیرم. (8 سال پیش)
+2 0
من منظورتونو متوجه شدم . شما فکر فکر کردی که برای تعریف کلید باید یه متغیر به همون اسم تعریف کنی . نه نیازی نیست کلید مثل یه اسم میمونه ، مثل اسم یه فایل توی کامپیوتر ، مثل اسم یک فرد ، که ما با استفاده از اون میتونیم به اطلاعاتش دسترسی داشته باشیم . این اسمو خودمون میدونیم و نیازی نیست که یه متغیر براش تعریف کنیم. اگه بخام دقیق تر برات توضیح بدم، shared prefrence مثل یک کلاس میمونه ، کلاسی که توش متغیر ها ذخیره میشن . ما اول در کد خودمون با یک کلید اسم این کلاس رو میگیم و بعد با کلید دیگه متغیرمونو صدا میزنیم که اطلاعاتو ازش بگیریم . در آخر بگم ، انتظار نداشته باش که هموناول همه چیز رو متوجه بشی ، یه با یکم ور رفتن و سر و کله زدن با کد راحت میتونی یاد بگیری ، اگه آموزش های استاد رو 2000 بار هم ببینی و فقط همون هارو حفط کنی به دردت نمیخوره ، باید آموزش ها رو یاد بگیری نه اینکه حفظ کنی ، باید متوجه بشی ، نه اینکه عین یه دستگاه کپی آموزش هارو روی کامپایلر بیاری. امیدوارم موفق باشی :) (8 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .