چگونه داده های اپلیکیشن اندروید را به صورت لوکال ذخیره کنیم؟ - بخش اول

چگونه داده های اپلیکیشن اندروید را به صورت لوکال ذخیره کنیم؟ - بخش اول

یکی از مهم ترین بخش های هر اپلیکیشن به ذخیره اطلاعات ارتباط پیدا می کند، به منظور ذخیره سازی داده های اپلیکیشن به صورت لوکال گزینه هایی پیش روی توسعه دهندگان اندروید قرار دارد. پلتفرم اندروید از پایگاه داده SQLite برای ذخیره داده های رابطه ای و فایل های خاص که جهت ذخیره جفت های کلید-مقدار بکار می روند، جهت دسترسی مستقیم به فضای ذخیره سازی داخلی و خارجی گوشی اندروید استفاده می کند. اپلیکیشن های اندروید قادر به استفاده از پایگاه داده های شخص ثالث که پشتیبانی از NoSQL را ارائه می دهند نیز می باشند.

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

1. ذخیره سازی جفت های کلید-مقدار

چنانچه به دنبال راهی سریع برای ذخیره چندین رشته یا عدد می گردید، استفاده از یک فایل preferences گزینه خوبی به نظر می رسد. اکتیویتی ها و سرویس های اندروید قادر به استفاده متد ()getDefaultSharedPreferences از کلاس PreferenceManger جهت دریافت یک رفرنس به یک آبجکت SharedPreferences می باشند که قادر به نوشتن در فایل تنظیمات پیش فرض و خواندن این فایل می باشد.

SharedPreferences myPreferences

= PreferenceManager.getDefaultSharedPreferences(MyActivity.this);

برای شروع نوشتن در فایل تنظیمات لازم است تا متد ()edit از آبجکت SharedPreferences که یک آبجکت SharedPreferences.Editor را بر می گرداند، صدا بزنید.

SharedPreferences.Editor myEditor = myPreferences.edit();

آبجکت SharedPreferences.Editor دارای چندین متد بصری است که می توانید به منظور ذخیره جفت های کلید و مقدار جدید در فایل تنظیمات مورد استفاده قرار دهید. برای نمونه می توانید از متد ()putString برای نوشتن آن دسته از جفت های کلید-مقدار که مقدار آنها از نوع رشته است استفاده نمایید.

به طور مشابه با استفاده از متد ()putFlouat مقادیری از نوع شناور را بنویسید، قطعه کد زیر سه جفت کلید-مقدار می سازد:

myEditor.putString("NAME", "Alice");

myEditor.putInt("AGE", 25);

myEditor.putBoolean("SINGLE?", true);

زمانی که تمامی جفت ها را اضافه کردید باید متد ()commit از آبجکت SharedPreferences.Editor را فراخوانی کنید:

myEditor.commit();

خواندن از یک آبجکت SharedPreferences آسان تر است، تمامی کار لازم فراخوانی متد ()*get مناسب می باشد. برای مثال جهت دریافت جفت کلید-مقدار از نوع رشته باید متد ()getString را فراخوانی کنید. در زیر قطعه کدی را مشاهده می کنید که تمامی مقادیر را که قبلا اضافه شده بازیابی می کند:

String name = myPreferences.getString("NAME", "unknown");

int age = myPreferences.getInt("AGE", 0);

boolean isSingle = myPreferences.getBoolean("SINGLE?", false);

همانطور که در کد بالا مشاهده می کنید، تمامی متدهای ()*get به عنوان پارامتر دوم خود به یک مقدار پیش فرض نیاز دارند که همان مقداری است که در صورت عدم وجود کلید در فایل تنظیمات باید آن مقدار را برگردانیم.

توجه داشته باشید که فایل تنظیمات تنها محدود به رشته ها و انواع ابتدایی از داده ها می باشد، از این رو چنانچه مایل به ذخیره انواع پیچیده تری از داده ها و یا داده های باینری هستید باید یک گزینه ذخیره سازی دیگر را انتخاب نمایید.

2. استفاده از یک پایگاه داده SQLite

تمای اپلیکیشن های اندروید قادر به ساخت و استفاده از پایگاه داده SQLite به منظور ذخیره سازی حجم انبوهی از داده های ساخت یافته می باشند و این نوع پایگاه داده دارای مزیت سبکی و سرعت بالا می باشد. چنانچه با کار با سیستم مدیریت پایگاه داده رابطه ای آشنایی دارید و با SQL که مخفف Structured Query Language است کار کرده اید و JDBC را که مخفف Java Database Connectivity است را مورد استفاده قرار داده اید، این گزینه احتمالا گزینه ترجیحی شما می باشد.

جهت ساخت یک پایگاه داده SQLite جدید یا باز کردن پایگاه داده ای که وجود دارد، می توانید از متد ()openOrCreateDatabase در اکتیویتی یا سرویس استفاده کنید و نام پایگاه داده و حالتی را که می خواهید آن را باز کنید به عنوان آرگونت های متد ارسال نمایید. پرکاربردترین حالت MODE_PRIVATE است که پایگاه داده را تنها در دسترس اپلیکیشن شما قرار می دهد، در زیر نحوه ساخت یا باز کردن یک پایگاه داده به نام my.db نشان داده شده است:

SQLiteDatabase myDB = 

openOrCreateDatabase("my.db", MODE_PRIVATE, null);

وقتی که پایگاه داده ساخته شد می توانید از متد ()execSQL برای اجرای دستورات SQL برای ساخت یک جدول به نام user که دارای سه ستون است بهره بگیرید:

myDB.execSQL(

"CREATE TABLE IF NOT EXISTS user (name VARCHAR(200), age INT, is_single INT)"

);

اضافه کردن سطر به جدول از طریق متد ()execSQL نیز امکان پذیر می باشد، اما بهتر است تا به جای آن از متد ()insert استفاده شود. متد ()insert به سه آبجکت ContentValues که شامل مقادیر هر ستون از جدول هستند نیاز دارد. آبجکت ContentValues شباهت زیادی به آبجکت Map داشته و دربرگیرنده جفت های کلید-مقدار می باشد.

در اینجا دو آبجکت ContentValues دارید که می توانید در جدول user مورد استفاده قرار دهید:

ContentValues row1 = new ContentValues();

row1.put("name", "Alice");

row1.put("age", 25);

row1.put("is_single", 1);

ContentValues row2 = new ContentValues();

row2.put("name", "Bob");

row2.put("age", 20);

row2.put("is_single", 0);

توجه داشته باشید که کلیدهای ارسال شده برای متد ()put باید با نام ستون های جدول هم خوانی داشته باشند.

وقتی که آبجکت های ContentValues آماده شد می توانید آنها را همراه با نام جدول برای متد ()insert ارسال کنید.

myDB.insert("user", null, row1);

myDB.insert("user", null, row2);

برای اجرای کوئری در پایگاه داده می توانید متد ()rawQuery را مورد استفاده قرار دهید، این متد یک آبجکت Cursor را که دربرگیرنده نتیجه کوئری انجام شده است بر می گرداند.

Cursor myCursor = 

myDB.rawQuery("select name, age, is_single from user", null);

آبجکت Cursor می تواند شامل صفر یا تعداد بیشتری سطر باشد، ساده ترین راه برای پیمایش سطرها فراخوانی متد ()moveToNext در داخل حلقه while می باشد.

برای واکشی مقدار هریک از ستون ها باید از متدهایی مانند ()getString و ()getInt استفاده کنید که ایندکس ستون را نیاز دارند. در زیر نحوه بازیابی تمامی مقادیری که در جدول user وارد کرده اید نشان داده شده است:

while(myCursor.moveToNext()) {

String name = myCursor.getString(0);

int age = myCursor.getInt(1);

boolean isSingle = (myCursor.getInt(2)) == 1 ? true:false;

}

زمانی که تمامی نتایج کوئری را واکشی کردید، مطمئن شوید که متد ()close از آبجکت Cursor را برای آزاد کردن تمامی منابع استفاده شده فراخوانی کرده اید.

myCursor.close();

به طور مشابه وقتی که تمامی عملیات مرتبط با پایگاه داده تمام شد باید متد ()close از آبجکت SQLiteDatabase را فراخوانی کنید.

myDB.close();

در مطلب بعدی شما را با نحوه کار با حافظه داخلی و خارجی گوشی اندروید آشنا خواهیم کرد.

http://code.tutsplus.com برگرفته از

اینها را هم بخوانید