بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
کپی دیتابیس ساخته شده به SDCard و استفاده از آن
سلام استاد، من طبق راهنماییهای شما دارم پروژه رو از اول بصورت اصولی و مرتب مینویسم تا بتونم مشکلات برنامه رو پیدا کنم، البته هنوز تموم نشده ولی چندتا سوال داشتم:
یه چیزی واسه من هنوزم مبهم مونده، اونم اینکه طبق آموزشها ما میتونیم دیتابیس و تیبل رو موقع اجرا توسط خود برنامه ایجاد کنیم. اما چطوری باید از دیتابیسی که قبلا ایجاد کردیم استفاده کنیم؟مثلا با همون پلاگین فایرفاکس یک دیتابیس ایجاد کردم و کل متن یک کتاب رو داخلش ریختم.توی املاتور میشه فایل دیتابیس رو وارد کرد. اما وقتی فایل apk از برنامه میگیریم، توی فایل نصبی. چطوری دیتابیس مورد نظر رو وارد کنیم؟
برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال
uncocoder
12 سال پیش
+5
0
با یک الگوریتم مربوط به کپی، که شما از اینترنت گرفته بودی و در سورس پروژتون بود، می تونید فایلی که در مثلا فولدر raw یا فولدر assets قرار داره رو داخل sdcard کپی کنید. به این ترتیب ، دیتابیس در sdcard وجود خارجی داره و کافیه بعد از کپی شدن، بهش دستور openOrCreate رو بدید و دیگه نیازی به ساخت table و ... نیست.
برای اینکه هر دفعه هم کپی نشه، خیلی ساده قبل از کپی شدن میشه چک کرد که آیا این فایل وجود داره یا نه. اگر نداشت کپی کنه.
برای اینکه هر دفعه هم کپی نشه، خیلی ساده قبل از کپی شدن میشه چک کرد که آیا این فایل وجود داره یا نه. اگر نداشت کپی کنه.
پاسخ به سوال
Pooya
10 سال پیش
0
0
لطفا اگه میشه کدی که می تونه دیتا بیس قرار گرفته در فولدر databases در assests رو تو محل از قبل تعیین شده درون sdcard واریز کنه بزارید. من با کد زیر نتونستم کار کنم و کپی نمی کنه.
private boolean prepareDB() {
SQLiteDatabase DB;
try {
String state = Environment.getExternalStorageState();
InputStream is = context.getAssets().open(DATABASE_NAME);
if (state.equals(Environment.MEDIA_MOUNTED)) {
File DB_PATH = new File(DIR_APP_DATABASE + DATABASE_NAME);
Log.i("LOG", "SD MOUNTED");
if (DB_PATH.exists()) {
//
Log.i("LOG", "DB exist");
DB = SQLiteDatabase.openOrCreateDatabase(DB_PATH, null);
return true;
}
else {
//"DB NOT exist
Log.i("LOG", "DB NOT exist");
if (copy(new FileOutputStream(DB_PATH), is)) {
//Copy Success
DB = SQLiteDatabase.openOrCreateDatabase(DB_PATH, null);
return true;
}
else {
//
Log.i("LOG", "Copy Faild");
return false;
}
}
}
else {
//SD NOT MOUNTED
Log.i("LOG", "SD NOT MOUNTED");
File dbFile = new File(getFilesDir().toString() + "/" + DATABASE_NAME);
if (dbFile.exists()) {
//DB exist
Log.i("LOG", "DB exist");
DB = SQLiteDatabase.openOrCreateDatabase(dbFile, null);
return true;
}
else {
//DB NOT exist
Log.i("LOG", "DB NOT exist");
FileOutputStream os = openFileOutput(DATABASE_NAME, context.MODE_PRIVATE);
if (copy(os, is)) {
//Copy Success
Log.i("LOG", "Copy Success");
DB = SQLiteDatabase.openOrCreateDatabase(dbFile, null);
return true;
}
else {
Log.i("LOG", "Copy Faild");
return false;
}
}
}
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
private boolean copy(OutputStream os, InputStream is) {
try {
int readed = 0;
byte[] buffer = new byte[8 * 1024];
while ((readed = is.read(buffer)) > 0) {
os.write(buffer, 0, readed);
}
try {
is.close();
}
catch (Exception e) {
e.printStackTrace();
}
try {
os.flush();
}
catch (Exception e) {
e.printStackTrace();
}
try {
os.close();
}
catch (Exception e) {
e.printStackTrace();
}
return true;
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .