如何以编程方式删除android WebView中的脱机模式缓存?

如何以编程方式删除android WebView中的脱机模式缓存?,android,android-webview,offline-caching,offline-mode,Android,Android Webview,Offline Caching,Offline Mode,我正在尝试删除脱机模式(在cache.manifest中定义)文件,而不删除任何WebSQL数据库或本地存储数据 我一直在尝试删除缓存文件,并使用stackoverflow和其他地方的相关答案,使用以下方法的答案删除WebView缓存: 表示手动删除Context.getCacheDir()中的文件FWIW,我注意到使用更简单的方法(一个不被接受的答案指出)会产生相同的结果:WebView.clearCache(true)。此方法不会删除cache.manifest中未包含的缓存文件 我还使用

我正在尝试删除脱机模式(在cache.manifest中定义)文件,而不删除任何WebSQL数据库或本地存储数据

我一直在尝试删除缓存文件,并使用stackoverflow和其他地方的相关答案,使用以下方法的答案删除WebView缓存:

表示手动删除
Context.getCacheDir()中的文件
FWIW,我注意到使用更简单的方法(一个不被接受的答案指出)会产生相同的结果:
WebView.clearCache(true)。此方法不会删除cache.manifest中未包含的缓存文件

我还使用了其他提到使用的地方描述的技术

deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
对我的脱机模式文件没有影响。我已经通过验证删除了webview.db,但奇怪的是,我从未见过使用
Context.databaseList()
的webviewCache.db文件

(顺便说一句,我对删除webview.db持怀疑态度,因为我在下一次打开我的应用程序时注意到删除webview.db并尝试将文本粘贴到输入字段后发生崩溃。似乎需要对某些应用程序进行一些防御性编程

android.database.sqlite.SQLiteException: no such table: formurl: , while compiling: SELECT _id FROM formurl WHERE (url == ?)
    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
    at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:146)
    at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:367)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:130)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1539)
    at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1419)
    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1375)
    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1455)
    at android.webkit.WebViewDatabase.getFormData(WebViewDatabase.java:1150)
    at android.webkit.WebView$RequestFormData.run(WebView.java:4493)
    at java.lang.Thread.run(Thread.java:1020)
android.database.sqlite.SQLiteException:没有这样的表:formurl:,编译时:从formurl中选择_id,其中(url==?)
在android.database.sqlite.SQLiteCompiledSql.native\u compile(本机方法)中
位于android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:64)
位于android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:146)
位于android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:367)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:130)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:94)
位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:46)
位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1539)
位于android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1419)
位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1375)
位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1455)
位于android.webkit.WebViewDatabase.getFormData(WebViewDatabase.java:1150)
位于android.webkit.WebView$RequestFormData.run(WebView.java:4493)
运行(Thread.java:1020)
)

我还使用了应用程序设置页面中的“清除缓存”按钮,对脱机模式文件没有影响。应用程序设置页面上的“清除数据”按钮确实会删除脱机模式文件,但也会删除所有其他文件,包括我的WebSQL数据库和本地存储密钥。我也不知道如何以编程方式模拟“清除数据”按钮,这也会很有用,尽管不是我想要的答案

重申一下,重点是这些方法似乎都不够。我想做的是删除离线模式缓存的JS/HTML/CSS,保留所有通过Android WebView创建的webql数据库文件和本地存储密钥


我正在查看我的web服务器日志,以便准确地判断我的应用程序何时请求文件。

此代码似乎模仿了“清除数据”按钮,至少就WebView而言是这样的:
WebStorage WebStorage=WebStorage.getInstance();webStorage.deleteAllData();reload()