چگونه داده های اپلیکیشن اندروید را به صورت لوکال ذخیره کنیم؟ - بخش دوم
در مطلب قبلی با نحوه ذخیره سازی اطلاعات با استفاده از جفت های کلید-مقدار و استفاده از پایگاه داده SQLite آشنایی پیدا کردید، در ادامه استفاده از حافظه داخلی و خارجی برای ذخیره سازی داده ها را شرح خواهیم داد، با ما همراه باشید.
3. استفاده از حافظه ذخیره سازی داخلی
به هر اپلیکیشن اندروید یک دایرکتوری ذخیره سازی داخلی خصوصی تخصیص داده می شود که اپلیکیشن می تواند در آن متن و فایل های باینری را ذخیره کند. فایل های درون این دایرکتوری در دسترس کاربر و یا سایر اپلیکیشن های نصب شده بر روی گوشی کاربر قرار ندارند و تنها اپلیکیشن به آنها دسترسی دارد. این فایل ها با پاک کردن اپلیکیشن از روی گوشی به طور خودکار پاک می شوند.
پیش از استفاده از دایرکتوری ذخیره سازی داخلی، باید موقعیت قرارگیری آن را مشخص کنید، برای این کار باید متد ()getFilesDir را که برای اکتیویتی ها و سرویس ها در دسترس است فراخوانی کنید.
File internalStorageDir = getFilesDir();
به منظور دریافت یک رفرنس به یک فایل داخل دایرکتوری، می توانید نام فایل را همراه با مکان قرارگیری که مشخص کرده اید ارسال نمایید، در زیر نحوه دریافت یک رفرنس به فایلی به نام alice.csv را مشاهده می کنید.
File alice = new File(internalStorageDir, "alice.csv");
از این مرحله به بعد می توانید از دانش خود درباره کلاس و متدهای I/O جاوا برای خواندن از یک فایل یا نوشتن بر روی آن بهره بگیرید. قطعه کد زیر نحوه استفاده از آبجکت FileOutputStream و متد ()write آن به منظور نوشتن در فایل را نشان می دهد:
// Create file output stream
fos = new FileOutputStream(alice);
// Write a line to the file
fos.write("Alice,25,1".getBytes());
// Close the file output stream
fos.close();
4. استفاده از حافظه ذخیره سازی خارجی
از آنجایی که ظرفیت حافظه داخلی گوشی های اندروید معمولا ثابت و در اغلب شرایط محدود نیز می باشد، بسیاری از گوشی های اندروید از رسانه های ذخیره سازی خارجی مانند SDکارت ها پشتیبانی می کنند. پیشنهاد می شود که از این گزینه ذخیره سازی برای فایل های حجیم مانند عکس ها و ویدیوها استفاده کنید.
بر خلاف حافظه داخلی، خافظه خارجی همواره در دسترس نمی باشد، از این رو لازم است همواره پیش از استفاده از آن در دسترس بودن این حاظه در گوشی را چک کنید، برای این کار از متد ()getExternalStorageState از کلاس Environment استفاده نمایید.
if(Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED)) {
// External storage is usable
} else {
// External storage is not usable
// Try again later
}
زمانی که از بابت وجود حافظه مطمئن شدید، می توانید مسیر دایرکتوری ذخیره سازی خارجی برای اپلیکیشن را با استفاده از متد ()getExternalFilesDir و ارسال null به عنوان آرگومنت بگیرید، با استفاده از مسیر دایرکتوری قادر به رفرنس دادن به فایل های درون دایرکتوری می باشید، در زیر نحوه رفرنس دادن به فایلی به نام bob.jpg در دایرکتوری خارجی اپلیکیشن را مشاهده می کنید:
File bob = new File(getExternalFilesDir(null), "bob.jpg");
با درخواست از کاربر جهت اعطای مجوز WRITE_EXTERNAL_STORAGE قادر به دریافت دسترسی خواندن/نوشتن به کل سیستم فایل بر روی حافظه خارجی هستید و پس از آن می توانید از دایرکتوری های عمومی شناخته شده برای ذخیره عکس ها، فیلم ها و سایر فایل های رسانه ای استفاده کنید.
کلاس Environment دارای یک متد به نام ()getExternalStoragePublicDirectory برای تشخیص مسیرهایی این دایرکتوری های عمومی است.
برای مثال با ارسال مقدار Environment.DIRECORY_PICTURES به متد می توانید مسیر دایرکتوری عمومی که در آن قادر به ذخیره عکس ها هستید را مشخص کنید و به طور مشابه اگر مقدار Environment.DIRECTORY_MOVIES را به متد بفرستید، مسیر دایرکتوری عمومی که فیلم ها در آن ذخیره شده اند را دریافت می کنید.
در زیر نحوه رفرنس دادن به یک فایل به نام bob.jpg در دایرکتوری عمومی تصاویر را مشاهده می کنید:
File bobInPictures = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES),
"bob.jpg"
);
وقتی که آبجکت File را داشته باشید می توانید دوباره از کلاس های FileInputStream و FileOutputStream برای خواندن از فایل یا نوشتن بر روی آن استفاده نمایید.
جمع بندی
در این مطلب با نحوه استفاده از گزینه های ذخیره سازی لوکال که توسط SDK اندروید ارائه شده آشنایی پیدا کردید. عملیات خواندن/نوشتن در صورت درگیر بودن حجم زیادی از داده ها ممکن است زمان بر باشد و این شرایط به نوع ذخیره اطلاعات ارتباط چندانی ندارد. بنابراین جهت کسب اطمینان از اینکه ترد UI اصلی همیشه در دسترس می ماند، باید اجرای عملیات ذخیره سازی را در یک ترد متفاوت به انجام رسانید.
به این نظر پاسخ دهید
به این نظر پاسخ دهید
به این نظر پاسخ دهید
به این نظر پاسخ دهید