我正在Android移动平台上构建一个测验应用程序。 我正在创建一个带有预加载信息的SQLite数据库(quiz.sqlite)。
启动应用程序时,数据库不会在/data/data/[PROJECT]/databases/quiz.sqlite中创建。因此应用程序崩溃。
使用Database Helper查找逻辑或示例代码。
任何人都可以提供帮助。
-Ranjan
答案 0 :(得分:0)
我使用这个适合我自己需要的c / p代码来导入我的备份数据库,但是我需要设置在我的实际设备上读写数据的权限。不幸的是,我找不到代码来赞美原始海报。您必须创建一个空数据库才能使用此方法。然后,这将使用您已创建的Sqlite数据库替换该数据库。
这只是一种可能的解决方案,希望有人可以通过更简单的解决方案做出回应。
String inFileName= Environment.getExternalStorageDirectory() + "/back_up.db"; // This is where the .db file you want to load is stored on your new device
File dbFile = new File(inFileName);
FileInputStream fis = null;
try {
fis = new FileInputStream(dbFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Exception InFile: "+e.toString(), Toast.LENGTH_LONG).show();// This was to help me define errors
}
String outFileName = context.getDatabasePath(DATABASE_NAME).getPath();// This is where Android will look for the database "/data/data/[PROJECT]/databases/quiz.sqlite"
// Open the empty db as the output stream
OutputStream output = null;
try {
output = new FileOutputStream(outFileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Exception OutFile: "+e.toString(), Toast.LENGTH_LONG).show();
}
// Transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
try {
while ((length = fis.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
// Close the streams
try {
output.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
helper.close();
答案 1 :(得分:-1)
这不是一个简单的解决方案,对您来说这不是一个完整的解决方案。我最近自己解决了这个问题,尽管更多的是备份和恢复Sqlite数据库
首先,您需要在清单中设置读写权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
https://developer.android.com/training/data-storage/files.html