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

درخواست مشاوره: سناریوهای مختلف ذخیره اطلاعات برنامه در شرایط مختلف و دلیل ترجیح هر کدام

لذت برنامه نویسی اندروید  9 سال پیش  9 سال پیش
+5 0

با سلام.

مقدمه اولیه ایجاد این تاپیک از اینجا شروع شد. بد نیست اول یه نگاهی بهش بندازید تا با دلیل شروع این تاپیک بیشتر آشنا بشید.

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

من روی تبلتم حین کار با برنامه AIDE به این تجربه برخوردم: فایلی برای ویرایش ایجاد کرده بودم که لازم بود پاکش کنم و دوباره بسازمش.  هرچی پاکش میکردم دوباره برمیگشت. یعنی به هیچ وجه پاک نمیشد. از طریق file manager خود اندورید هم هرچی پاکش میکردم پاک نمیشد و دوباره ظاهر میشد. خلاصه تنها از طریق برنامه ES file expolrer تونستم پاکش کنم تا به کارم بتونم ادامه بدم.

از این تجربه متوجه شدم که ممکنه فایلی ایجاد بشه که به راحتی نشه پاکش کرد. از طرفی استاد توی آموزشها موقع کار با دیتابیس توصیه کردن که هنکام ایجاد Cursor حتما اون رو ببنیدیم و اگه قبل از بسته شدنش برنامه کرش بکنه و کرسر باز بمونه دیگه با اون دیتابیس هیچ کاری نمیشه کرد. با توجه به این موارد من به حساسیت ایجاد فایل پی بردم و اینکه باید بهترین سناریوی بی عیب و نقص انتخاب بشه تا مشکلات به حداقل برسه.

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

هدف اصلی این تاپیک بدست آوردن نمونه کد نیست هرچند اگه کدهای نمونه هم یه جا لیست بشه خیلی خوب خواهد بود. بیشتر بررسی سناریوهای مختلف برای ایجاد فایل و ذخیره سازی اطلاعات برنامه هست. کل انجمن رو هم در این مورد جستجو میکنم و تاپیکهای مفید رو اینجا لینک میدم مثل: لینک 1 و لینک 2 و ...

فعلا چیز منسجمی در ذهن ندارم واسه همین مواردی که به ذهن خودم میرسه موقتا لیست میکنم تا سر فرصت بررسی کنیم، اگه موردی هم به ذهن شما رسید در بخش نظرات حتما بنویسید. نتیجه گیری های نهایی رو با توجه به راهنمایی دوستان در همین پاسخ بروز میکنم. (در متن زیر مواردی هست که بصورت خبری هست و اطلاعاتی رو ارائه میده. مواردی هم هست که بصورت سوالی هست و نیازمند راهنمایی دوستان):

  • میزان حیاتی بودن اطلاعات :(به ترتیب اولویت)
    1- ذخیره روی سرور
    2- اگر به امکان سرور دسترسی ندارید ذخیره در پوشه data/data (در صورت root نبودن دستگاه، امکان دسترسی کاربر به اطلاعات وجود نداره)
    3- اگر خیلی حیاتیه کد کردن اطلاعات - در اینصورت محل ذخیره سازی دیگه مهم نیست چون اطلاعات به دست هرکی برسه بدردش نخواهد خورد. این لایبرری رو هم دوست خوبمون آقای کاشی زاده معرفی کردن برای کد کردن بانک اطلاعاتی.
    4- در صورت عدم دسترسی به ذخیره روی سرور ، و عدم امکان کد کردن اطلاعات به لحاظ مسائل فنی مورد نیازش، و روت بودن دستگاه که به کاربر این امکان رو میده که به آدرس data/data هم دسترسی داشته باشه آیا میشه در هر آدرس دلخواه دیگه ای در حافظه داخلی چیزی رو ذخیره کرد (به نوعی اطلاعات رو در پوشه نامعلومی که فقط خودمون میدونیم گم و گور کنیم)؟

  • حیاتی بودن محل ذخیره سازی اطلاعات:
    بستگی به میزان حیاتی بودن اطلاعات داره. از طرفی اگر حجم اطلاعات بالا باشه بهتره که در حافظه داخلی ذخیره نشه و امکان انتقال به sdcard وجود داشته باشه. خیلی بهتر میشه که امکان انتخاب به کاربر داده بشه که خودش تصمیم بگیره که آیا بتونه اطلاعات رو به sdcard منتقل کنه یا نه؟ البته حیاتی بودن اطلاعات هم در اجازه دادن به کاربر برای این کار دخیل هست.

  • در دسترس بودن یا نبودن اطلاعات بعد از حذف برنامه:
    ترجیحا بهتره که با پاک شدن برنامه اطلاعات اونم پاک بشه و لاشه اضافی از برنامه باقی نمونه.
    هر چیزی که در پوشه خود برنامه در مسیر data/data باشه هنگام حذف برنامه پاک میشه.
    مگر اینکه برنامه استثنا داشته باشه مثل اینکه بازی باشه که نیازه اطلاعاتش حفظ بشه. برای این حالت هم باید راه کار درستی رو در پیش گرفت.

  • بحث ایمپورت و اکسپورت کردن اطلاعات:
    فرض کنید که اطلاعات مهمی هست که نیاز به نگهداریشون هست حتی در صورت حذف برنامه. در این صورت بهتره که از امکان ایمپورت و اکسپورت اطلاعات استفاده بشه. و انجامش رو هم به عهده خود کاربر قرار بدیم. در این صورت مسولیت حفظ اطلاعات به عهده کاربر هست و نه شما و برنامه شما و نیازی نیست که در این مورد نگران باشید.

  • بحث فرمت اطلاعات: (منظورم دیتابیس یا فایل معمولیه مثلا فایل متنی و یا فایل با فرمت دلخواه که استاد در آموزش توضیح داده، در چه مورد بهتره از کدوم یکی از این حالتها استفاده بشه؟.)

  • بحث به اشتراک گذاری اطلاعات: (منظورم از طریق پیامک یا ایمیل و یا راه های دیگه به اشتراک گذاری هست. مثل بلوتوث و یا حتی وایرلس)

  • بحث محلهای قابل دسترس برای ذخیره سازی اطلاعات:
    طبق مستندات گوگل در این آدرس ، چهار محل برای ذخیره سازی معرفی شده:
    1- Shared Preferences: میتوان تنظیمات برنامه رو بصورت یک فایل یا چندین فایل ذخیره کرد. این اطلاعات حتی بعد از خارج شدن از برنامه پاک نشده و میشه موقع اجرای برنامه اونها رو خوند و برنامه رو با آخرین تنظیمات ذخیره شده مجددا اجرا کرد، محل فیزیکی ذخیره این فایلها در پوشه shared_prefs در آدرس نصب برنامه هست. بدون روت دستگاه دسترسی مستقیم به اونها نمیشه داشت.
    2- Internal Storage: (توضیحات مفصل رو در این لینک میتونید ببینید)
    3- External Storage: (توضیحات مفصل رو در این لینک میتونید ببینید، و همچنین این لینک )
    4- SQLite Databases (ذخیره اطلاعات در دیتابیس هست، که خود محل فیزیکی ذخیره این دیتابیس در موارد معرفی شده است.)
    5- Network Connection (که همون ذخیره اطلاعات روی وب هست)

  • بحث آنلاین یا آفلاین بودن برنامه:
    ایا در صورت امکان آنلاین نوشتن برنامه حتما باید اون رو بصورت آنلاین بنویسیم و یا اینکه ممکنه مواردی باشه که حتی در صورت امکان آنلاین بودن، بهتره که برنامه رو آفلاین بنویسیم. فرض کنید که اطلاعات حیاتی هم نداریم که مثلا لازم باشه حتما روی سرور منتقل کنیم.

ادامه دارد....

0 0
من موندم تو این همه وقت و انرژی و دقتتون من که به شخصه نمی تونم یه خسته نباشید به شما. اما در مورد سوالتون در تاپیکی سورس کدی از مجتبی یگانه عزیز دیدم که در این مورد بود و سورس جالبی بود تاپیک در مورد دیتابیس بود گفتم شاید بدردتون بخوره هر چند که گفتید هرچند هدف نمونه کد نیست موفق باشید (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
کاشی زاده  9 سال پیش
+5 0

سلام ، مطالبی که نوشتید خیلی زیاد هست من هر کدوم رو که بدونم مختصری توضیح میدم .

میزان حیاتی بودن اطلاعات : حیاتی بودن اطلاعات بسته به نوع اطلاعات داره ، در صورتی که اطلاعات بسیار مهمی دارید بهتره روی کلاینت ذخیره نکنید و بر روی سرور خودتون قرار بدید و امنیت رو از سرور برقرار کنید چون سرقت اطلاعات از کلاینت خیلی راحت تر از سرور انجام پذیر هست .

حیاتی بودن محل ذخیره سازی اطلاعات : این سوال هم در مورد بالا پاسخ داده شد ، که بهتره در سرور اطلاعات مهم رو نگه دارید و در صورتی که این کار شدنی نیست میتونید روی کلاینت در data/data ذخیره کنید تا enduser بهش دسترسی نداشته باشه .

در دسترس بودن یا نبودن اطلاعات بعد از حذف برنامه : بهتره اطلاعات برنامه بعد از حذف پاک بشن مگر بازی باشه که نیاز به ذخیره اطلاعات بازی باشه در صورتی که دیتابیس شما در data/data باشه خودش بعد از حذف برنامه از بین میره .

بحث ایمپورت و اکسپورت کردن اطلاعات : در صورتی که از دیتابیس استاندارد استفاده کنید مشکلی در import و export اطلاعات ندارید مثل کار با mysql هست .

بحث فرمت اطلاعات : این رو متوجه نشدم منظورتون فرمت ذخیره سازی هست یا خود داده ها ، که در صورتی که نوع فایل هست بهتره فایل دیتابیس باشه . تمامی توضیحات بالا در شرایط استفاده از دیتابیس هست .

که توصیه میکنم به جای ذخیره اطلاعات بر روی فایل از دیتابیس استفاده کنید .البته این در شرایطی هست که اطلاعات شما زیاد هست و برای دسترسی راحت تر دیتابیس مناسب تر هست .

بحث به اشتراک گذاری اطلاعات : ؟

بحث محلهای قابل دسترس برای ذخیره سازی اطلاعات : که در بالا توضیحات لازم داده شد .

بحث آنلاین یا آفلاین بودن برنامه : این هم توضیحاتش در بالا داده شد .

 

+1 0
ممنون بابت توضیحات مفصلتون. از دیگر دوستان هم دعوت میکنم که در این تاپیک شرکت کنند. و تجربیات خودشون رو به اشتراک بگذارند. (9 سال پیش)

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