我正在尝试删除我的离线模式(在 cache.manifest 中定义)文件,而不删除任何 WebSQL 数据库或本地存储数据。
我一直在尝试删除缓存文件,并使用 stackoverflow 和其他地方的相关答案来使用以下方法的答案删除 WebView 缓存:
Android Webview - Completely Clear the Cache
which states to手动删除Context.getCacheDir();
FWIW中的文件,我注意到使用更简单的方法会产生相同的结果(这是一个不被接受的答案)WebView.clearCache(true);
:。这种方法确实会删除未包含在 cache.manifest 中的缓存文件。
我还使用了其他多个提到使用的地方描述的技术
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
对我的离线模式文件没有影响。我已经可验证地删除了 webview.db,但奇怪的是,我从未见过使用Context.databaseList()
.
(顺便说一句,我对删除 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)
)
我还使用了应用程序设置页面中的“清除缓存”按钮,对离线模式文件没有影响。应用程序设置页面上的“清除数据”按钮确实删除了离线模式文件,但也删除了其他所有内容,包括我的 WebSQL 数据库和本地存储密钥。我也不知道如何以编程方式模仿“清除数据”按钮,这也很有用,尽管不是我正在寻找的答案。
重申一下,关键是这些方法似乎都不够。我想要做的是删除我离线模式缓存的 JS/HTML/CSS 并保留所有通过 Android WebView 创建的 WebSQL db 文件和本地存储密钥。
我正在查看我的网络服务器日志,这样我就可以准确地知道我的应用程序何时请求文件。