android69
جمعه 11 مهر 1393, 13:42 عصر
سلام به همه دوستان برنامه نویس
مشکل برنامه ام اینه وقتی برنامه از حافظه گوشی خارج میشه یا گوشی خاموش روشن میشه لیست علاقه ها پاک میشه. تا جایی که فهمیدم مشکل از کپی شدن دیتا بیس روی رم گوشی سورس رو گذاشتم لطفا کمک کنید ممنون.
کلاس HelperIo:
public static void closeStream(InputStream stream) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void closeStream(OutputStream stream) {
try {
stream.flush();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void closeChannel(FileChannel channel) {
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void copyFile(String inputFilename, String outputFilename) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = new FileInputStream(inputFilename);
outputStream = new FileOutputStream(outputFilename);
copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
public static void copyFile(String inputFilename, OutputStream outputStream) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(inputFilename);
copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
public static void copyFile(InputStream inputStream, String outputFilename) {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(outputFilename);
copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
public static void copyFile(InputStream inputStream,
OutputStream outputStream) {
byte[] buffer = new byte[8 * 1024];
int lenRead = 0;
try {
while ((lenRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, lenRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
}
و در داخل کلاس سراسری به این صورت استفاده کرده ام:
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsol utePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/hamed/new";
@Override
public void onCreate() {
super.onCreate();
new File(DIR_SDCARD).mkdirs();
context = getApplicationContext();
preference = getSharedPreferences(getPackageName(), Context.MODE_PRIVATE);
defaultFontName = preference.getString("default_font", "AdobeArabic-Regular.otf");
typefaceArabi = Typeface.createFromAsset(getAssets(), fontarabi);
typefaceFarsi = Typeface.createFromAsset(getAssets(), fontfarsi);
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
AssetManager assetManager = context.getAssets();
InputStream inputStream;
try {
inputStream = assetManager.open("database/hamed.db");
HelperIO.copyFile(inputStream, DIR_DATABASE + "/hamed.db");
}
catch (IOException e) {
e.printStackTrace();
}
ManageDataBase();
}
private void ManageDataBase() {
database = SQLiteDatabase.openDatabase(DIR_SDCARD + "/hamed.db", null, 0);
String Query1 = "CREATE TABLE IF NOT EXISTS data (row_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , id INTEGER, like INTEGER DEFAULT 0, tag TEXT, arabi TEXT, farsi TEXT)";
String Query2 = "CREATE TABLE IF NOT EXISTS showdata (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , name TEXT, like INTEGER DEFAULT 0, tag TEXT)";
database.execSQL(Query1);
database.execSQL(Query2);
}
مشکل برنامه ام اینه وقتی برنامه از حافظه گوشی خارج میشه یا گوشی خاموش روشن میشه لیست علاقه ها پاک میشه. تا جایی که فهمیدم مشکل از کپی شدن دیتا بیس روی رم گوشی سورس رو گذاشتم لطفا کمک کنید ممنون.
کلاس HelperIo:
public static void closeStream(InputStream stream) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void closeStream(OutputStream stream) {
try {
stream.flush();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void closeChannel(FileChannel channel) {
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void copyFile(String inputFilename, String outputFilename) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = new FileInputStream(inputFilename);
outputStream = new FileOutputStream(outputFilename);
copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
public static void copyFile(String inputFilename, OutputStream outputStream) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(inputFilename);
copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
public static void copyFile(InputStream inputStream, String outputFilename) {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(outputFilename);
copyFile(inputStream, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
public static void copyFile(InputStream inputStream,
OutputStream outputStream) {
byte[] buffer = new byte[8 * 1024];
int lenRead = 0;
try {
while ((lenRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, lenRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeStream(inputStream);
closeStream(outputStream);
}
}
}
و در داخل کلاس سراسری به این صورت استفاده کرده ام:
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsol utePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/hamed/new";
@Override
public void onCreate() {
super.onCreate();
new File(DIR_SDCARD).mkdirs();
context = getApplicationContext();
preference = getSharedPreferences(getPackageName(), Context.MODE_PRIVATE);
defaultFontName = preference.getString("default_font", "AdobeArabic-Regular.otf");
typefaceArabi = Typeface.createFromAsset(getAssets(), fontarabi);
typefaceFarsi = Typeface.createFromAsset(getAssets(), fontfarsi);
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
AssetManager assetManager = context.getAssets();
InputStream inputStream;
try {
inputStream = assetManager.open("database/hamed.db");
HelperIO.copyFile(inputStream, DIR_DATABASE + "/hamed.db");
}
catch (IOException e) {
e.printStackTrace();
}
ManageDataBase();
}
private void ManageDataBase() {
database = SQLiteDatabase.openDatabase(DIR_SDCARD + "/hamed.db", null, 0);
String Query1 = "CREATE TABLE IF NOT EXISTS data (row_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , id INTEGER, like INTEGER DEFAULT 0, tag TEXT, arabi TEXT, farsi TEXT)";
String Query2 = "CREATE TABLE IF NOT EXISTS showdata (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , name TEXT, like INTEGER DEFAULT 0, tag TEXT)";
database.execSQL(Query1);
database.execSQL(Query2);
}