بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
استفاده از دیتابیس
با سلام
من میخواستم یه کتاب بسازم و طبق اموزش استاد دیتابیس ساختم
وقتی دیتابیس رو ساختم وتوی پوشه assets گذاشتم توی کلاس G عملیات کپی از asetsبه حافظه دستگاه رو نوشتم
البته اینجا با این شرط این کار رو کردم که اگه ابن فایل قبلا روی دستگاه هست دیگه کپی نشه
روی بعضی گوشیها جواب میده ولی روی اکثرشون کرش میکنه
دلیل کرش هم cannot open or create database میده
بعضیا میگن از handle باید استفاده کنم
خواستم ببینم مشکل چیه؟
برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال
FSR
9 سال پیش
+3
0
سلام
من از این کد استفاده میکنم تا به حال هم به مشکل بر نخوردم
کلاس G:
public static String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static String DIR_APP = DIR_SDCARD + "/hotel/databeas";
public void copyAssetToSdcard() {
AssetManager assetManager = context.getAssets();
InputStream inputStream = null;
File file = new File(DIR_APP + "/hotel_db.sqlite");
if ( !file.exists()) {
try {
inputStream = assetManager.open("hotel_db.sqlite");
HelperIO.copyFile(inputStream, DIR_APP + "/hotel_db.sqlite");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
کلاس HelperIO :
package fardin.saeedi.course.app.reservation;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class HelperIO {
public static void copyFile(InputStream inputStream, String stream) {
OutputStream outputStream = null;
byte[] buffer = new byte[8 * 1024];
int lenRead = 0;
try {
outputStream = new FileOutputStream(stream);
while ((lenRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, lenRead);
}
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
try {
outputStream.flush();
outputStream.close();
}
catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
فقط کافیه اسم و مسیر دیتابیس رو تغییر بدید.
سلام ، از همین پاسخ استفاده کنم برای پرسش خودم : getExternalStorageDirectory() مسیر کارت حافظه خارجی رو میده ؟ خب اگه گوشی بدون حافظه خارجی باشه چی میشه ؟ یا حافظه خارجی داره ولی کاربر خارجش کرده ؟ چون منم تقریبا از همین کدها استفاده میکنم . و تا حالا روی گوشی بدون کارت حافظه تست نکردم . مسیر حافظه داخلی کدش چیه که شرط بذاریم اگه خارجی وجود نداشت ، بگیم در حافظه داخلی کپی بشه ؟ (9 سال پیش)
پاسخ به سوال
Soheil
9 سال پیش
0
0
سلام.
به احتمال بسیار زیاد شما باید از ران تایم پرمیژن ها استفاده میکردید ک نکردید.
پاسخ به سوال
General
9 سال پیش
+1
0
این کدهای کلاس G
public class G extends Application{
public static Context context;
public static String direction=Enviroment.getExternalStorageDirectory().getAbsolutePath()+"/material_book";
onCreate(){
context=getApplicationContext();
File file=new File(direction);
file.mkdirs();
if(!file.exists()){
try{
file.createNewFile();
copyFromAssets(getBaseContext().getAssets().open("material_book.sqlite"),
new FileOutputStream(direction+"/material_book.sqlite"));
}catch(IOException e){
e.printStackTrace();
}
}
}
public void copyFromAssets(InputStream inputStream,OutputStream)throw IOException{
byte[] buffer=new byte[];
int length;
while((length=inputStream.read(buffer))>0){
outputStream.write(buffer,0,length);
}
inputStream.close();
outputStream.close();
}
}
پاسخ به سوال
Soheil
9 سال پیش
+2
0
File file=new File(direction);
file.mkdirs();
if(!file.exists()){
}
دقیقا همینجا اشتباهه !! شما باید این خط کد رو داخل شرط بزارید :
file.mkdirs();
پاسخ به سوال
General
9 سال پیش
+1
0
یعنی اینطور بشه؟
onCreate(){
context=getApplicationContext();
File file=new File(direction);
if(!file.exists()){
try{
file.mkdirs();
file.createNewFile();
copyFromAssets(getBaseContext().getAssets().open("material_book.sqlite"),
new FileOutputStream(direction+"/material_book.sqlite"));
}catch(IOException e){
e.printStackTrace();
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .