在我们从资产文件夹复制文件之前,存在一个同名的空数据库文件。
android.database.sqlite.SQLiteException:无此类表:
此错误消息是合法的,因为在我们的数据目录中存在一个具有相同名称的空数据库。尽管我们尚未复制它。
如何创建我们的数据库文件?
为什么即使我们没有调用或实例化数据库助手,它为什么也存在?
为所有以前的版本使用相同的SQLiteHelper类,没有问题。 全新安装使用assets目录中现有数据库的Android应用后,在Android 9 Pie上运行会导致此错误消息。通常,当该文件在数据目录中不存在时,将其复制并打开。
经过检查并重新检查后,在我们从资产目录移出文件之前,该文件已存在。
在检查Android 9 Pie数据目录时,我们的SQLite数据库文件已存在。这是在新安装并清除缓存和数据之后
重复我们所看到的。
卸载应用程序。
启动器活动“ SplashActivity” onCreate()
String mName = "myawesomedatabase.db";
String mDatabasePath = this.getApplicationInfo().dataDir + "/databases";
File file = new File (mDatabasePath + "/" + mName);
Log.i("DATABASE", "##### SplashActivity.getData() " + mDatabasePath + "/" + mName);
if (file.exists()) {
Log.i("DATABASE", "##### SplashActivity.getData() FILE EXISTS!!!");
}
重复以上操作,但未卸载应用程序,请正确复制文件。它仅适用于新安装。
我们已经确认我们没有对数据目录进行硬编码。经过研究,我们发现数据库目录已更改。
来自:/ data / data / com .___._____ / databases /
收件人:/ data / user / 0 / com .____.____ / databases /
请参阅有助于此发现的本文。 Android P - 'SQLite: No Such Table Error' after copying database from assets
解决方法:
全新安装的应用程序。
等待崩溃
设置...应用...特定应用...清除缓存+清除存储
再次运行应用
成功,数据目录中不存在数据库,则该应用程序从Assets Directory复制文件没有问题。
答案 0 :(得分:1)
没有愚蠢的问题吗? 但是,当我做出一个简单的回答时,我会觉得很蠢。
也许花点时间在这里问,使我们看起来更难。
Android P具有从备份自动还原的功能。即使您没有安装该应用程序的副本。因此,已从备份还原损坏的文件。
Android P纠正步骤(至少在开发环境中)
设置...
系统
/高级
备份
应用数据
关闭自动还原
发现是通过AVD恢复出厂设置后发现的。但是,具有不同应用版本的开发设备会遇到相同的问题。