کسی میتونه shared preference رو به زبان ساده توضیح بده لطفا ؟ (حل شد)
سلام دوستان
من یک ماهه میخوام یک صلوات شمار بسازم تا عملی برنامه نویسی یاد بگیرم. ساخت صلوات شمار خیلی ساده هست ولی ذخیره مقدار شمارش شده خیلی سخته. (من میخوام یک 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 + ""); } });
شما اول یه شی از shared preferences میسازی، بعد باید از طریق اون یه کلید با value مورد نظر خود را داخل اون ذخیره و در جای مورد نظر اونو استخراج و در متغییر ذخیر کنید.
برای مثال یکی از روش هایی که توی اینترنت به نظرم ساده اومد این بود:
اومدم بعد از 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();
ولی نمیدونم چرا این کارهارو کردم و نمیدونم چرا جواب نمیگیرم.
لطفا یکی خیلی با جزئیات توضیح بده :(
خوب دوست عزیز در مثال بالا پریفرنس شما کلیدی نداره
اول ببینیم کلید چیه : کلید یه رشتست که ما با استفاده از اون میتونیم مقادیر توی حافظه ی دستگاه رو صدا بزنیم
خوب دقت کنید :
اول ما یک 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 رو وارد کنیم تا کار مارو انجام بده
دوست عزیز امیدوارم منظورمو رسونده باشم تنها نکته استفاده از پریفرنس ها همون کلید هاست که با یکم کار کردن حل میشه .
موفق باشی
منظور از رشته همون string هستش یعنی متن که بین دو تا " قرار میگیره
بخش اولو که shared prefrence هستش باید موقع فراخوانی عدد هاتون از حافظه بنویسید یعنی اول پریفرنس رو تعریف میکنید بعد متغیر های اون پریفرنس رو تعریف میکنید و بعد اون عدد های پریفرنسار توی متغیر که تعداد صلواتاست میریزید پس باید برای اولین دستور برنامه بنویسید :
SharedPreferences shp = getSharedPreferences("کلید شما", MODE_PRIVATE);
i = shp.getInt("kilide moteghayer" , 0 );
با اینکار برنامه اول یا تعداد اعداد رو از حافظه میگیره یا اگه وجود نداشته باشه یکی میسازه و عدد صفر رو بر میگردونه . متغیر i رو هم که قبلش تعریف کرده بودید
سوال دومتون : ببینید منظور از کلید یه رشتست که با اون ما عدد هامون رو از حافظه فراخوانی میکنیم یچیزی میمونه مثل اسم یه نفر ما برای اینکه حرفیو به کسی بگیم باید اول اسمشو بگیم دیگه! اینم همونه باید یه اسم براش انتخاب کنیم که دفعه های بعدی با اون اسم صداش بزنیم پس متغیر من کلید نداره اصلا معنی نمیده جون باید یه اسم داشته باشه که صداش بزنی
خوب شما برای ذخیره تنها کاری که باید بکنید بعد از i++ باید بنویسید :
shpE.putInt("کلید متغیر شما", i);
shpE.commit();
حالا اونجا منظور از i اون متغیر i هستش که شما تعریف کردید
الآن این شد :
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(); } }); } }
و بالاخره کار کرد !
آقا دمت گرم، خدا خیرت بده.
میشینم حسابی مطالعه میکنم این کد رو تا قشنگ متوجه بشم.
مدیونتم !
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .