ورود

View Full Version : کار با کتابخانه sqliteassethelper



samiasoft
جمعه 25 خرداد 1397, 10:14 صبح
سلام دوستان


کسی با کتابخانه sqliteassethelper برای ارتباط با اسکیولایت استفاده کرده ؟



درحالت عادی که میدونید دیتابیس رو داخل پوشه assets قرار بدیم بطور عادی این کتابخانه میشناسه...اما من میخواستم محلشو تغییربدم حال چگونه مسیر رو بهش معرفی کنیم؟

Nevercom
شنبه 26 خرداد 1397, 16:24 عصر
همونظور که می‌دونید، روش کار این کتابخانه این شکلیه که فایل های دیتابیس رو تو یه فولدر خاص (databases) در فولدر assets
قرار می‌دید و وقتی اپ نصب شد اون رو کپی می‌کنه به فولدر داخلی برنامه، و می‌تونید ازش استفاده کنید.

اگه هدفتون اینه که بعد نصب فایل دیتابیس بجای کپی در فولدر مخصوص برنامه، در یک دایرکتوری دیگه کپی بشه (مثلاً تو حافظه‌ی خارجی) که یه Constructor دیگه داره برای همین منظور:

public SQLiteAssetHelper(Context context, String name, String storageDirectory, CursorFactory factory, int version)
که لازمه خودتون اطمینان حاصل کنید که اپ به مسیر موردنظر دسترسی داره و اون مسیر قابل نوشتن باشه برای اپ.
اما اگر منظورتون اینه که بجای قرار دادن در پوشه databases در assets، می‌خواید تو یه فولدر دیگه در assets باشه، باید سورس کتابخانه (که سه تا کلاس بیشتر نیست) رو ویرایش کنید

samiasoft
شنبه 26 خرداد 1397, 17:06 عصر
همونظور که می‌دونید، روش کار این کتابخانه این شکلیه که فایل های دیتابیس رو تو یه فولدر خاص (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