从资产文件夹复制之前创建的Android P(9,Pie)SQLite空数据库

时间:2018-09-25 15:52:34

标签: android sqlite assets

在我们从资产文件夹复制文件之前,存在一个同名的空数据库文件。

android.database.sqlite.SQLiteException:无此类表:

此错误消息是合法的,因为在我们的数据目录中存在一个具有相同名称的空数据库。尽管我们尚未复制它。

如何创建我们的数据库文件?

为什么即使我们没有调用或实例化数据库助手,它为什么也存在?

为所有以前的版本使用相同的SQLiteHelper类,没有问题。 全新安装使用assets目录中现有数据库的Android应用后,在Android 9 Pie上运行会导致此错误消息。通常,当该文件在数据目录中不存在时,将其复制并打开。

经过检查并重新检查后,在我们从资产目录移出文件之前,该文件已存在。

在检查Android 9 Pie数据目录时,我们的SQLite数据库文件已存在。这是在新安装并清除缓存和数据之后

重复我们所看到的。

  1. 设置…应用程序和通知
  2. 选择我们的应用
  3. 存储
  4. 清除缓存+清除存储
  5. 卸载应用程序。

    启动器活动“ 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

解决方法:

  1. 全新安装的应用程序。

  2. 等待崩溃

  3. 设置...应用...特定应用...清除缓存+清除存储

  4. 再次运行应用

  5. 成功,数据目录中不存在数据库,则该应用程序从Assets Directory复制文件没有问题。

1 个答案:

答案 0 :(得分:1)

没有愚蠢的问题吗? 但是,当我做出一个简单的回答时,我会觉得很蠢。

也许花点时间在这里问,使我们看起来更难。

Android P具有从备份自动还原的功能。即使您没有安装该应用程序的副本。因此,已从备份还原损坏的文件。

Android P纠正步骤(至少在开发环境中)

  1. 设置...

  2. 系统

  3. /高级

  4. 备份

  5. 应用数据

  6. 关闭自动还原

发现是通过AVD恢复出厂设置后发现的。但是,具有不同应用版本的开发设备会遇到相同的问题。