我创建了Sqlite数据库和我的应用程序所需的所有表,并将其放在assets文件夹中。访问我的应用程序时,我将数据插入数据库中的所有表。现在如果我通过像Shareit这样的应用程序共享转移应用程序,我无法看到我在新收到的应用程序中插入的数据。如何使数据永久化,以便如果我共享应用程序,所有添加的运行时数据也必须共享。
答案 0 :(得分:-2)
要实现它,
检查数据库是否已经存在。
private void isDBExist() {
String outFileName = "/data/data/" + getPackageName() + "/databases/"
+ DatabaseHandler.DATABASE_NAME;
File f = new File(outFileName);
if (!f.exists()) {
f.getParentFile().mkdirs();
copyDataBase(DatabaseHandler.DATABASE_NAME);
}
}
如果数据库不存在,则将数据库文件从资产文件夹复制到数据库文件夹中。
private void copyDataBase(String DB_NAME) {
// Open your local db as the input stream
// ContextWrapper cw =new ContextWrapper(getApplicationContext());
String DB_PATH = "/data/data/" + getPackageName() + "/databases/";
if (android.os.Build.VERSION.SDK_INT >= 17) {
DB_PATH = getApplicationInfo().dataDir + "/databases/";
} else {
DB_PATH = "/data/data/" + getPackageName() + "/databases/";
}
InputStream myInput;
Log.i("Database", "New database is being copied to device!");
byte[] buffer = new byte[1024];
OutputStream myOutput = null;
int length;
// Open your local db as the input stream
try {
myInput = getAssets().open(DB_NAME);
// transfer bytes from the inputfile to the
// outputfile
File f = new File(DB_PATH + DB_NAME);
f.createNewFile();
// dbFile.getParentFile().mkdirs();
myOutput = new FileOutputStream(f);
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.close();
myOutput.flush();
myInput.close();
Log.i("Database", "New database has been copied to device!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}