آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل درکد کپی بانک اطلاعاتی(اخرین مهلت پروژم یکشنبست دوستان کمک کنید)

jamal2012  11 سال پیش  11 سال پیش
0 0

سلام به نظر تون این کد چی کم داره ویا کجاش اشتباست کد کاملا واضحه ولی من جواب نمیگیرم نمیدونم کجا رو اشتباه کردم



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 رو توی اون فولدر قرار بدید.

0 0
برای حلقه while از try - catch استفاده کنید ! (11 سال پیش)
0 0
دوستان ممنونم ازتون تقریبا داره حل میشه (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .