مشخصات مقاله
-
2626
-
0.0
-
4324
-
0
-
1
آموزش ذخیره سازی جفت کلید-مقدار (قسمت اول)
دوره آموزش برنامه نویسی اندروید
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.
آموزش ذخیره سازی جفت کلید - مقدار قسمت اول
در این مبحث از آموزش برنامه نویسی اندروید با نحوه ی ذخیره سازی جفت کلید-مقدار (key-value pair) و همچنین شیوه ی خواندن و نوشتن فایل ها در پلتفرم اندروید آشنا می شویم.
فهرست محتوا
1. ماندگار کردن داده در فایل (file-based persistence )
متدهای ماندگار کردن داده های محلی
مقایسه ی حافظه ی داخلی با حافظه ی خارجی
جای گذاری و نصب برنامه ی کاربردی در حافظه ی خارجی
2. Preferences
ذخیره سازی جفت کلید-مقدار
گوش فراخوانی به تغییرات در preferences
3. پیش نیاز
4. پیش نیاز تمرین
5. ایجاد Preference setting برای RSSfeed
ایجاد فایل preference
ایجاد activity ای ویژه ی settings
راه اندازی activity بخش تنظیمات (settings )
استفاده از مقدار preferences به منظور بارگذاری RSSfeed
تست و اجرا برنامه
تمرین بیشتر : نمایش مقدار جاری در settings
6. رابط برنامه سازی فایل اندروید
استفاده از رابط برنامه سازی کاربردی فایل
حافظه ی خارجی
1. file-based persistence (ماندگار کردن داده در فایل)
متدهای ماندگار کردن داده های محلی
اندروید به برنامه نویس اجازه می دهد داده های برنامه ی کاربردی را از طریق فایل سیستم ماندگار (persistent) کند. مختص هر یک از اپلیکیشن های موجود سیستم اندروید یک دایرکتوری data/data/[application package] ایجاد می کند.
اندروید از روش های ذخیره سازی داده در سیستم فایل محلی زیر پشتیبانی می کند.
Files- می توان فایل های مورد نیاز را ایجاد و بروز رسانی کرد.
Preferences- سیستم اندروید این امکان را برای برنامه نویس فراهم می کند که جفت کلید-مقدار ماندگار از نوع داده های اولیه را ذخیره و بازیابی کند.
پایگاه داده ی SQLite- نمونه هایی از پایگاه های داده SQLite نیز در سیستم فایل محلی ذخیره و نگه داری می شود.
فایل های مورد نظر در پوشه ی files ذخیره شده و تنظیمات برنامه یا اپلیکیشن هم در پوشه ی shared_prefs نگه داری می شوند.
در صورتی که برنامه ی کاربردی مورد نظر یک پایگاه داده ایجاد کند، پایگاه داده ی مزبور در دایرکتوری اصلی برنامه ی کاربردی (main app directory) تحت پوشه ی databases ذخیره می شود.
تصویر زیر فایل سیستمی را نشان می دهد که شامل فایل، فایل هایی که در حافظه ی پنهان ذخیره شده اند (cache files) و preferences می باشد.
تنها خود برنامه قادر است در دایرکتوری اپلیکیشن (app directory) چیزی رایت کند / بنویسد یا زیرپوشه (sub-directory) های اضافی در آن ایجاد کند. ویژه ی زیر پوشه های ذکر شده، برنامه برای اپلیکیشن های دیگر مجوزهای خواندن و نوشتن صادر می کند.
مقایسه ی حافظه ی داخلی با حافظه ی خارجی در اندروید
همان طور که مطلع هستید اندروید دارای حافظه ی داخلی و خارجی می باشد. حافظه ی خارجی به طور کامل امن و خصوصی نیست، همچنین همیشه در دسترس نمی باشد. برای مثال در صورتی که دستگاه اندروید به رایانه متصل باشد، رایانه می تواند سیستم خارجی را از طریق USB سوار (mount) کند. این امر باعث می شود حافظه ی خارجی دیگر برای برنامه های کاربردی اندروید قابل دسترسی نباشد.
جای گذاری و نصب برنامه ی کاربردی در حافظه ی خارجی اندروید
از ورژن 8 جعبه ابزار برنامه نویسی اندروید (8 SDK level) به بعد این قابلیت برای برنامه نویس بوجود آمد که برنامه ی مورد نظر را طوری طراحی کند که در حافظه ی خارجی دستگاه نیز نصب شود. برای این منظور android:installLocation را روی preferExternal یا auto تنظیم کنید.
در این مورد ممکن است برخی از مولفه های معینی از برنامه در حافظه ی خارجی ذخیره شوند. با این وجود پایگاه داده و دیگر داده های خصوصی بازهم در حافظه ی داخلی سیستم ذخیره می شوند.
2. Preferences
ذخیره سازی جفت کلید-مقدار
اندروید جهت ماندگار کردن جفت های کلید-مقدار (preferences) نوع داده های اولیه از کلاس SharedPreferences بهره می گیرد.
تعریف preferences را می توان از طریق یک منبع XML انجام داد.
کلاس PreferenceManager به منظور دسترسی به preference های ذخیره شده در یک فایل مشخص تعدادی متد ارائه می دهد. کد زیر نحوه ی دسترسی به preferences را از یک فایل معین نمایش می دهد.
# getting preferences from a specified file
SharedPreferences settings = getSharedPreferences("Test"، Context.MODE_PRIVATE);
نکته
preferences به طور معمول به صورت خصوصی ایجاد شده و تنها توسط مولفه های خود برنامه قابل دسترسی می باشند. به اشتراک گذاری داده با دیگر برنامه های کاربردی به وسیله ی فایل world readable/writable preference بسیار نادر است، به این خاطر که مولفه ی خارجی باید برای این منظور از اسم فایل و مکان دقیق آن آگاه باشد.
دستیابی به Preference های پیش فرض با فراخوانی متد PreferenceManager.getDefaultSharedPreferences(this)، از هر مولفه ای امکان پذیر می باشد.
همان طور که در نمونه کد زیر مشاهده می کنید می توان از طریق کلید و نمونه ی کلاس SharedPreferences به مقدار preference دسترسی پیدا کرد.
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity();
String url = settings.getString("url"، "n/a");
جهت ایجاد یا ویرایش preference باید متد edit () را در شی SharedPreferences پیاده کنید. پس از اصلاح مقدار، باید متد apply () را به منظور اعمال تغییرات وارده به صورت ناهمگام در فایل سیستم، صدا بزنید. استفاده از متد commit () از آنجایی که تغییرات را به صورت همزمان به فایل سیستم وارد می کند توصیه نمی شود.
Editor edit = preferences.edit();
edit.putString("username"، "new_value_for_user");
edit.apply();
گوش فراخوانی ( Listener ) به تغییرات در preferences
می توانید با فراخوانی متد registerOnSharedPreferenceChangeListener() در شی SharedPreferences، به تغییراتی که در preferences رخ می دهد توجه فرمایید.
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
// Instance field for listener
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs، String key) {
// Your Implementation
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
آنچه باید به آن توجه داشت این است که شی SharedPreferences گوش فراخوان ها را در weakHashMap نگه می دارد، بنابراین در صورتی که کد هیچ ارجاعی به گوش فراخوان نداشته باشد، ممکن است گوش فراخوان بازیابی شود.
3. پیش نیاز
تمرین زیر از مثال "de.tahlildadeh.android.socialapp" بر گرفته شده، جهت آشنایی با آن به بخش آموزش Action Bar در اندروید مراجعه کنید.
4. پیش نیاز تمرین
برای ادامه ی آموزش باید پروژه ای به نام com.example.android.rssfeed با درایه ای به نام Settings در action bar ایجاد کنید.
5. ایجاد Preference setting برای RSSfeed
ایجاد فایل preference
یک منبع XML اندروید از نوع PreferenceScreen (که عنصر ریشه ی آن PreferenceScreen باشد) و به نام mypreferences.xml ایجاد کنید.
پس از پروسه ی ایجاد منبع XML، ویرایشگر مناسب اندروید باید بتواند فایل مورد نظر را باز کند. اگر فایل مذکور به صورت خود کار باز نشد، کافی است طبق دستور العمل زیر خود به باز کردن آن اقدام کنید.
Open with → Android XML Resource Editor
حال روی دکمه ی Add کلیک کرده و یک Preferences از نوع EditTextPreferences اضافه کنید. Preference مزبور باید RSS feed URL نام گذاری شده و از کلید url بهره بگیرد.
نکته
همچنین می توانید مقدارهایی را برای دیگر ویژگی های EditTextField مانند inputMethod وارد کنید.
ایجاد activity ای ویژه ی settings
کلاس SettingsActivity که کلاس دیگری را به نام PreferenceActivity به ارث می برد، ایجاد کنید. این Activity فایل preference را بارگذاری کرده و به کاربر اجازه می دهد مقادیر مورد نظر را تغییر دهد.
package com.example.android.rssfeed;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class SettingsActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.mypreferences);
}
}
کلاس نام برده را به عنوان activity در فایل AndroidManifest.xml ثبت کنید.
راه اندازی activity بخش تنظیمات (settings)
Activity ای را که مختص Preference ایجاد کرده بودید، با استفاده از متد onOptionsItemSelected() باز کنید. این امر در مثال زیر به نمایش گذاشته شده است.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu، menu);
return true;
}
// This method is called once the menu is selected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.preferences:
// Launch settings activity
Intent i = new Intent(this، SettingsActivity.class);
startActivity(i);
break;
// more code...
}
return true;
}
استفاده از مقدار preferences به منظور بارگذاری RSSfeed
جهت استفاده از activity جدید و همچنین مقادیر preference، کلاس MyListFragment را تنظیم می کنیم. تکه کد زیر نحوه ی دسترسی به مقدار preference را در متدی که جهت بارگذاری feed از اینترنت یک AsyncTask راه اندازی و فعال می کند، نمایش می دهد.
public void updateListContent() {
if (parseTask == null) {
parseTask = new ParseTask();
parseTask.setFragment(this);
SharedPreferences settings PreferenceManager.getDefaultSharedPreferences(getActivity());
String url = settings.getString("url"، "http://www.tahlildadeh.com/");
parseTask.execute(url);
}
}
