我的应用程序在很大程度上依赖于数据库,在首次打开应用程序时,应将自身从/assets/
文件夹复制到数据库存储。然而,它似乎是令人难以置信的气质:例如我在我的免费和付费版本中几乎完全相同的代码,但一个目前正在工作,另一个不是。
请问您看看我的代码并查看最新/可以改进的内容吗?我的SQLiteOpenHelper
可以找到here,而onCreate()
的{{1}}方法位于以下位置:
DataProvider
谢谢!
修改
在使用模拟器后,我知道数据库存在,但由于某种原因它只是不想读它...
答案 0 :(得分:1)
下面是我用来复制数据库的代码(不确定它是否可以纠正错误,认为另一种方法总是值得一试)。否则,我没有看到任何可能导致错误的跳出来。
void copyFile(File src, File dst) throws IOException {
FileChannel inChannel = new FileInputStream(src).getChannel();
FileChannel outChannel = new FileOutputStream(dst).getChannel();
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} finally {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
}
另外想一想,为什么在检查数据库是否存在时打开和关闭数据库。看起来你可以逃避这样的事情:
private boolean checkDataBase() {
String myPath = DB_PATH + DB_NAME;
return new File(myPath).exists();
}
答案 1 :(得分:1)
您不应该真正硬编码数据库目录的路径。不是每次需要时都构建myPath,而是尝试使用以下代码在构造函数中构建:
实例:
private File myPath;
在构造函数中:
myPath = context.getDatabasePath(DB_NAME);