بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

محل انتقال اطلاعات برنامه بعد از نصب

مدیریت گفتگو
hamed 12 سال پیش
آخرین تغییر: 12 سال پیش

یه سوال پایه ای و شاید مبتدیانه داشتم

می خواستم ببینم وقتی برنامه ای را منتشر می کنیم بخش های مختلف آن به کجا منتقل می شوند و در کجا ذخیره می شوند.

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

نظرات

MeY3am 12 سال پیش
دیتابیس را باید در پوشه assets‬ بزارید
miladint 12 سال پیش
همونطور که دوستمون گفتن توی پوشه assets میذارید و کدی می نویسید که دیتابیس رو تا برنامه باز میشه به داخل محل مورد نظر کپی کنه روی حافظه و از اونجا دیتابیس رو لود کنه
hamed 12 سال پیش
بله. درسته.

پاسخ‌ها 1

مجتبی یگانه 12 سال پیش

شما می تونید اطلاعات رو در یک پوشه به نام assets  قرار بدید (اگر نیست بسازید)

مناسب ترین مکان برای ذخیره پوشه ی دیتای برنامه است ، این همان اطلاعاتی هست که در تنظیمات وقتی روی "پاک کردن داده های برنامه" کلیک می کنیم پاک میشه و مسیری شبیه این داره 

SDCard/Android/data/نام پکیچ شما
SDCard/Android/data/ir.negano.App1/db.sqlite

 باید این پوشه رو در زمان اجرا بسازید.

اینم نحوه ی کپی از Assets

 private boolean copyFromAssets(String FilePath, String Destination) {
    try {
        InputStream is = assetManager.open(FilePath);
        File outpuFile = new File(Destination);
        if (outpuFile.exists()) {
            outpuFile.delete();
        }
        OutputStream os = new FileOutputStream(outpuFile);
        byte[] Buffer = new byte[8 * 1024];
        int len = 0;
        while ((len = is.read(Buffer)) > 0) {
            os.write(Buffer, 0, len);
        }
        is.close();
        os.flush();
        os.close();
        return true;
    }
    catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

// نحوه ی فراخوانی
// اولی نام یا مسیر فایل در استز و دومی مسیر و نام فایل در آدرس نهایی هست اگه پوشه بندی شده باشه به این شکل میشه
// assets/database/db.sqlite => "database/db.sqlite"
// مسیر نهایی هم که میشه یه جایی تو sd card
// Storage/sdcard0/myAppFolder/db.sqlite
if (copyFromAssets("folderInAssets/data.sqlite", App_Path + "data.sqlite")) {
// فایل کپی شده } else { فایل کپی نشده ! }

نظرات

hamed 12 سال پیش
ممنون از پاسخگویی سریعتون. ولی یه مشکلی وجود داره. در همان مثال دیتا بیس فرض کنید بخواهیم توی این دیتابیس تغییراتی هم در حین کار برنامه اعمال کنیم. اون وقت در پایان کار برنامه مجبوریم آن را روی اس دی کارت باقی بذاریم و در این صورت اگر اطلاعات اس دی کارت پاک شود تغییرات ایجاد شده از دست می رود. اگر بخواهیم این تغییرات را در preference ذخیره کنیم آیا محدودیت حجم وجود دارد؟ البته مرتبط ساختن اطلاعات هم خودش داستانیه.
hamed 12 سال پیش
یه سوال دیگه هم به ذهنم رسید. اگر حجم این اطلاعات زیاد باشه چطور می تونیم در اول برنامه بدون توقف برنامه را اجرا کنیم؟ و یه سوال دیگه! (ببخشید که اینقدر می پرسم) ما پس از نصب برنامه هم می توانیم فایل به این فولدر assets وارد کنیم؟
مجتبی یگانه 12 سال پیش
کامنت اول : اصولش همینه ، اما در preference ها اطلاعات زیاد ذخیره نشه بهتره و قبلا بحث شده سرچ کنید - کامنت دوم : بله با استفاده از Thread ها - خیر به هیچ وجه !
hamed 12 سال پیش
درباره کامنت اول: آیا راهی هست اطلاعات را جایی دور از دسترس کاربر ذخیره کرد که احتمال پاک شدن آن ها وجود نداشته باشه؟ یا باید از راه های ابتکاری مثل کپی در فولدرهای مخفی یا جاهای متفرقه استفاده نمود؟
مجتبی یگانه 12 سال پیش
اگه کار اینقدر ریسکی هست ، سمت سرور کار کنید
hamed 12 سال پیش
متاسفانه برنامه آفلاینه. در بالا نوشته بودید که "این همان اطلاعاتی هست که در تنظیمات وقتی روی "پاک کردن داده های برنامه" کلیک می کنیم پاک میشه" منظورتون محتویات استز هست؟ یعنی کاربر می تونه اون ها را هم پاک کنه؟ اینجوری که بیچاره می شویم!
محتویات استز نه. ضمنا کاربر یه فایلی رو پاک کنه خودش بیچاره میشه. شما موظف به اصلاح رفتار کاربر نیستی که!
Criss 12 سال پیش
اونوقت ایکون برنامه توی چه پوشه ایی قرار میگیره ؟ چطوری میشه بعد از نصب برنامه رو دستکاری کرد ؟ چه مسیر های خاصی وجود داره ؟
sadeghbarout 12 سال پیش
آقا حامد شما اول برنامه ات همیشه چک کن اگه فایل دیتابیست وجود نداره کپیش کن و اگه وجود داره که هیچ. اینجوری اگه کاربر اشتباها هم برنامه رو پاک کنه مشکلی پیش نمیاد
sadeghbarout 12 سال پیش
@criss منظورت رو نگرفتم!
مجتبی یگانه 12 سال پیش
@sadegh مگه که چطوری ایکون رو موقع اجرا عوض کنیم
مجتبی یگانه 12 سال پیش
@criss قبلا بحث شده بود و اکثرا از جمله استاد گفتن نمیشه اما احتمال داره روشی پیدا شده باشه تا الــــــــــــــــــــــــــــــــــان
مجتبی یگانه 12 سال پیش
@مهندس حسین زاده - خدا شما رو رسوند :) - واقعا به ما چه ربطی داره کاربر دیتا رو پاک کنه ؟! ، خوب ما مثل کاربری که اولین اجراش رو داره برخورد میکنیم که صادق گفت
sadeghbarout 12 سال پیش
آها! بعد نصب؟ باید یه تستی بکنم ببینم!!
خیلی قبل تر همین موضوع تو ویندوز مطرح بود. میگفتیم دیتا بیس فایل میگفتن اگه کاربر پاک کرد چی؟ میگفتیم سرور دیتابیس - میگفتن اگه رفت از سرور پاک کرد چی؟ به این نتیجه رسیدیم که بجای پروپزال برنامه یه پروپزال دادیم به کارفرما حدود 200 صفحه در رابطه با تربیت اجتماعی کاربران. اون نامردم دیگه تماس نگرفت - هنوزم نمیدونم چرا!
مجتبی یگانه 12 سال پیش
من خودم وقتی یه فایلی رو دستکاری میکنم ، پی همه چیز رو به تنم میمالم - واقعا دلیلی نداره نگران باشیم - من حدس میزنم بنده خدا فوت شده باشن و گرنه دلیل شما منظقی بوده D:
hamed 12 سال پیش
کار فرهنگی کلا چیز خوبیه من تو برنامه ها بعضی جاها دیدم آیکون برنامه در حین کار عوض می شه مثل سامسونگ مارکت که هر وقت یه آپدیت داشته باشی روی خود آیکون توی منو عددی قرار می گیرد.

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