在我的 Android 应用程序中使用加密的SQLCipher数据库时出现以下错误,但只是关闭和打开:
net.sqlcipher.database.SQLiteException: not an error
at net.sqlcipher.database.SQLiteDatabase.dbopen(Native Method)
at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1950)
at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:900)
at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:947)
at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:195)
at com.android.storage.DatabaseHelper.getReadable(DatabaseHelper.java:99)
...
我在assets/
andlibs/
文件夹中有正确的文件,因为数据库大部分时间都可以正常工作。但是,每隔一段时间我就会看到这个错误。我现在已经在手机上看到过两次这种情况,并且一直是在数小时不活动后恢复应用程序之后(如果它从内存中清除,我会在数据库中检查用户的 oauth 令牌)。
我只从 Application::onCreate() 方法调用“SQLiteDatabase.loadLibs(this)”,所以我的预感是它不会在简历中被调用,而是抛出错误。这听起来可能吗?如果是这样,我应该在哪里调用 loadLibs?用户可以在任何活动中输入应用程序,如果令牌不在内存中,我可以访问数据库。我将我的选项视为在每个 Activity::onCreate 上调用 loadLibs 或在每次尝试打开数据库时调用它。如果我这样多次调用它会造成任何伤害或性能问题吗?