在构建时重写资产中的 SQLite 数据库
Rewritting a SQLite database in assets on build
我正在制作一个主要供个人使用的 android 应用程序。它与 SQLite 数据库一起用于存储数据。在 android studio 中,我将数据库放在 src/main/assets/ 文件夹中,并编写了一个 Java 方法来复制它,以便按照教程中的指示在 phone 内部使用它:
private void copyDatabase(File dbFile) throws IOException {
InputStream is = context.getAssets().open(DB_NAME);
OutputStream os = new FileOutputStream(dbFile);
byte[] buffer = new byte[1024];
while (is.read(buffer) > 0) {
os.write(buffer);
}
os.flush();
os.close();
is.close();
}
然后我通过在上下文“this”上应用该方法来复制该数据库并使用它。
我目前正在 Windows 上使用模拟器来调试我的应用程序,每次我对资产文件夹中的数据库进行更改时,它们都不会在虚拟 phone 上正确部署。我必须清除 phone 的内存并重新安装应用程序。有时该数据库甚至没有得到正确部署并且它的表丢失,这让我有点担心潜在的更新:鉴于我不太了解编译器如何在资源中部署文件,我需要一些帮助来澄清潜在的更新可能有问题。
是否有任何一种指令可以强制调试器在每次编译时重写资产中的所有文件?
Is there perhaps any kind of instruction to force the debugger to rewrite all the files in assets every time on compilation?
它会自动执行此操作。
但是,它不会导致您问题中的代码自动再次 运行。在某处,您有决定何时调用 copyDatabase()
的代码。可能它不会在每次应用 运行 时都这样做,但前提是还没有数据库的副本。
I have to wipe the memory of the phone clean and install the app again
如果我从上面的猜测是正确的,清除应用程序的数据将删除旧资产的现有副本,并会导致您的代码再次调用 copyDatabase()
并复制出新资产。
我正在制作一个主要供个人使用的 android 应用程序。它与 SQLite 数据库一起用于存储数据。在 android studio 中,我将数据库放在 src/main/assets/ 文件夹中,并编写了一个 Java 方法来复制它,以便按照教程中的指示在 phone 内部使用它:
private void copyDatabase(File dbFile) throws IOException {
InputStream is = context.getAssets().open(DB_NAME);
OutputStream os = new FileOutputStream(dbFile);
byte[] buffer = new byte[1024];
while (is.read(buffer) > 0) {
os.write(buffer);
}
os.flush();
os.close();
is.close();
}
然后我通过在上下文“this”上应用该方法来复制该数据库并使用它。 我目前正在 Windows 上使用模拟器来调试我的应用程序,每次我对资产文件夹中的数据库进行更改时,它们都不会在虚拟 phone 上正确部署。我必须清除 phone 的内存并重新安装应用程序。有时该数据库甚至没有得到正确部署并且它的表丢失,这让我有点担心潜在的更新:鉴于我不太了解编译器如何在资源中部署文件,我需要一些帮助来澄清潜在的更新可能有问题。 是否有任何一种指令可以强制调试器在每次编译时重写资产中的所有文件?
Is there perhaps any kind of instruction to force the debugger to rewrite all the files in assets every time on compilation?
它会自动执行此操作。
但是,它不会导致您问题中的代码自动再次 运行。在某处,您有决定何时调用 copyDatabase()
的代码。可能它不会在每次应用 运行 时都这样做,但前提是还没有数据库的副本。
I have to wipe the memory of the phone clean and install the app again
如果我从上面的猜测是正确的,清除应用程序的数据将删除旧资产的现有副本,并会导致您的代码再次调用 copyDatabase()
并复制出新资产。