نوشته شده توسط
Nevercom
همونظور که میدونید، روش کار این کتابخانه این شکلیه که فایل های دیتابیس رو تو یه فولدر خاص (databases) در فولدر assets
قرار میدید و وقتی اپ نصب شد اون رو کپی میکنه به فولدر داخلی برنامه، و میتونید ازش استفاده کنید.
اگه هدفتون اینه که بعد نصب فایل دیتابیس بجای کپی در فولدر مخصوص برنامه، در یک دایرکتوری دیگه کپی بشه (مثلاً تو حافظهی خارجی) که یه Constructor دیگه داره برای همین منظور:
public SQLiteAssetHelper(Context context, String name, String storageDirectory, CursorFactory factory, int version)
که لازمه خودتون اطمینان حاصل کنید که اپ به مسیر موردنظر دسترسی داره و اون مسیر قابل نوشتن باشه برای اپ.
اما اگر منظورتون اینه که بجای قرار دادن در پوشه databases در assets، میخواید تو یه فولدر دیگه در assets باشه، باید سورس کتابخانه (که سه تا کلاس بیشتر نیست) رو ویرایش کنید
تشکر میکنم از توجهتون
مسیری که درحالت عادی از پوشه asset به فولدر داخلی گوشی کپی میکنه مسیر مشابه زیر هست درسته؟
data/data/com....../database
سوالی که داشتم این هستش که :
- ایا برای کپی کردن فایل در این مسیر باید گوشی روت شده باشه ؟ اخه در بسیاری از تاپیک ها دیدم دوستان نتوانستن فایلی را در این مسیر کپی کنن بخاطر روت نبودن! حال اگر گوشی روت نیست پس چطوری این کتابخانه فایل دیتابیس رو در اونجا کپی میکند؟!
- سوال دوم هم اینکه این مسیر رو طبق توضیحاتتون خواستم در کلاسم قرار بدم ...کلاس MyDatabase که دارم بصورت زیر هست :
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
public final String storageDirectory="/data/data/"+this.getClass().getPackage().getName()+"/databases/";
public MyDatabase (Context context) {
super(context, DATABASE_NAME ,storageDirectory,null, DATABASE_VERSION);
setForcedUpgrade();
}
}
اما برای storageDirectory خطا میگیره cannot reference storageDirectory before supertype constructor