بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل درکد کپی بانک اطلاعاتی(اخرین مهلت پروژم یکشنبست دوستان کمک کنید)
سلام به نظر تون این کد چی کم داره ویا کجاش اشتباست کد کاملا واضحه ولی من جواب نمیگیرم نمیدونم کجا رو اشتباه کردم
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
publicclass G extends Application{
publicstatic Context context;
public staticSQLiteDatabase database;
public staticfinalString DIR_SDCARD =Environment.getExternalStorageDirectory().getAbsolutePath();
@Override
publicvoid onCreate(){
super.onCreate();
context = getApplicationContext();
prepareDB();
}
privateboolean prepareDB(){
String packageName = context.getPackageName();
try{
String PATH_APP = DIR_SDCARD +"/android/data/"+ packageName;
String state =Environment.getExternalStorageState();
InputStreamis= context.getAssets().open("MYdB.sqlite");
if(state.equals(Environment.MEDIA_MOUNTED)){
File DB_PATH =newFile(PATH_APP +"/MYdB.sqlite");
if(DB_PATH.exists()){
database =SQLiteDatabase.openOrCreateDatabase(DB_PATH,null);
returntrue;
}
else{
if(copy(newFileOutputStream(DB_PATH),is)){
database =SQLiteDatabase.openOrCreateDatabase(DB_PATH,null);
returntrue;
}
else{
returnfalse;
}
}
}
else{
PATH_APP = getFilesDir().toString();
File dbFile =newFile(getFilesDir().toString()+"MYdB.sqlite");
if(dbFile.exists()){
database =SQLiteDatabase.openOrCreateDatabase(dbFile,null);
returntrue;
}
else{
FileOutputStream os = openFileOutput("MYdB.sqlite", context.MODE_PRIVATE);
if(copy(os,is)){
database =SQLiteDatabase.openOrCreateDatabase(dbFile,null);
returntrue;
}
else{
returnfalse;
}
}
}
}
catch(Exception e){
e.printStackTrace();
returnfalse;
}
}
privateboolean copy(OutputStream os,InputStreamis){
try{
int readed =0;
byte[] buffer =newbyte[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();
}
returntrue;
}
catch(Exception e){
e.printStackTrace();
returnfalse;
}
}
}
0
0
واقعا کسی نمیدونه ار aluعزیز در خوایت کمک دارم اخرین مهلت پروژمه (11 سال پیش)
0
0
کمک کنید دیگه بچه ها (11 سال پیش)
0
0
کجایید؟ (11 سال پیش)
0
0
pleas help me (11 سال پیش)
0
0
امروز کسی نیست! (11 سال پیش)
0
0
اخرین درخواستم!کمک (11 سال پیش)
0
0
مگه شما نگفتید مشکلم تقریبأ حل شده؟ پاسخ Ali که مشکلتون رو حل میکنه، دقیقأ کدوم قسمتش رو مشکل دارید (11 سال پیش)
0
0
سلام واقعا ممنون که توجه کردی تو این بازار بی توجهی ببین دوست من من میخوام اگه اس دی کارت بود دیتا بیسو تو اس دی کارت بریزه و اگر هم اس دی کارت نبود دیتا بیسوتو حافظه داخلی بریزه از پوشه استس (11 سال پیش)
0
0
خیلی در گیرم لطفا کمکم کن مشکلم امشب حل شه فردا آبروم میره (11 سال پیش)
0
0
آموزش های استاد بخش 2-19 رو ببینید آموزش کامل کپی از assets و ... رو توضیح دادن ولی اگه میخوای نصب کل برنامت به تصمیم کاربر باشه پیشنهاد میکنم این لینک و پاسخ من رو ببینید لینک (11 سال پیش)
0
0
این کدی که علی گذاشته میاد تو اس دی کارت پوشه "/android/data/" + yourPackageNameرو ایجاد میکنه ودیتابیسو می ریزه اونجا وکاری به حافظه داخلی نداره (11 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
Ali
11 سال پیش
+3
0
سلام
مشکل کد بالا رو نمیدونم اما امیدوارم کد زیر کمکتون کنه:
public class G extends Application {
public static Context context;
public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_APP = DIR_SDCARD + "/android/data/" + yourPackageName;
public static final String DIR_DB = DIR_APP + "/db";
@Override
public void onCreate() {
super.onCreate();
new File(DIR_APP).mkdirs();
new File(DIR_DB).mkdirs();
final File dbFile = new File(DIR_DB + "/MYdB.sqlite");
if ( !dbFile.exists()) {
CopyAssets(); //تمام فایلهای داخل فولدر Files در assets روی محل مورد نظر کپی میشود
}
manageDatabase();
}
private void CopyAssets() {
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list("Files");
}
catch (IOException e) {
Log.e("tag", e.getMessage());
}
for (String filename: files) {
System.out.println("File name => " + filename);
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open("Files/" + filename); // if files resides inside the "Files" directory itself
out = new FileOutputStream(DIR_DB + "/" + filename);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
}
catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
}
private void manageDatabase() {
database = SQLiteDatabase.openOrCreateDatabase(DIR_DB + "/MYdB.sqlite", null);
}
}
متد CopyAssets تمام فایلهای داخل فولدر Files در assets رو روی مسیر داده شده کپی میکنه؛ و شما باید فقط MYdB.sqlite رو توی اون فولدر قرار بدید.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .