重新启动应用程序后,SQLite 抛出 "Unknown Tokenizer" 异常

Sqlite throws "Unknown Tokenizer" exception after restarting app

我正在我的应用程序中打包一个自定义的 Sqlite 构建,其中包含一个 HTMLtokenizer 以与 FTS 一起使用。我用虚拟空间创建了 FTS table。

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")

到 link 自定义 sqlite 构建和

System.loadLibrary("tokenizers")

到 link 打包的 Tokenizers 库到项目。

然后我使用以下命令将分词器注册到数据库

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

这似乎工作正常。我可以将数据插入 table 并查询数据就好了。直到我关闭应用程序并重新启动它,我收到以下错误:

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

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

当您第一次 运行 应用程序时,您只创建了一次数据库。 但是无论何时使用数据库,分词器都必须可用,因此无论何时有新的数据库连接,都必须注册它。

合适的地方是你创建新连接的地方;在原始 Android 数据库 API 中,这将是 onConfigure callback.