Sqlite重新启动应用程序后引发“未知令牌生成器”异常

时间:2018-08-03 20:42:59

标签: android sqlite android-ndk android-sqlite android-room

我正在将自定义Sqlite构建打包在我的应用程序中,并带有HTMLtokenizer以与FTS一起使用。我实际上是在房间里创建FTS表。

CREATE VIRTUAL TABLE IF NOT EXISTS subitem_content USING fts4(item_category_id, item_id, subitem_id, title, html, tokenize=HTMLTokenizer eng)

我还称呼以下内容:

System.loadLibrary("sqliteX")

链接自定义sqlite版本和

System.loadLibrary("tokenizers")

将打包的Tokenizers库链接到项目。

然后我使用以下命令将令牌生成器注册到数据库中

sqliteDb.loadExtension("libtokenizers")
sqliteDb.registerTokenizer(Tokenizer.HTML_TOKENIZER)

这似乎很好。我可以将数据插入表中并查询数据就可以了。直到我关闭应用程序并重新启动它,然后收到以下错误:

org.sqlite.database.sqlite.SQLiteException: unknown tokenizer: HTMLTokenizer (code 1): , while compiling:

如果我清除了应用程序数据并重新启动,那么第一次运行就可以了,但是在重新启动应用程序时崩溃了。 我检查了/ proc / pid / map以确保已加载本机库,并且它们在数据库事务处理时显示在此处。重新启动后为什么会出现此错误?

1 个答案:

答案 0 :(得分:1)

首次运行应用程序时,您只创建一次数据库。 但是,只要使用数据库,令牌生成器就必须可用,因此,只要有新的数据库连接,就必须注册它。

适当的位置是您创建新连接的任何地方;在原始的Android数据库API中,该名称为onConfigure callback