我知道我的web应用程序的appcache工作得很好,因为我在chrome上试过,甚至在chrome上也试过,但从webview加载到我的android应用程序中时,效果并不好。我有以下设置:
myWebView = (WebView) v.findViewById(R.id.webView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportMultipleWindows(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setAppCacheMaxSize(1024*1024*16);
String appCachePath = getActivity().getApplicationContext().getCacheDir().getAbsolutePath();
webSettings.setAppCachePath(appCachePath);
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setDatabaseEnabled(true);
String databasePath = "/data/data/" + getActivity().getPackageName() + "/databases/";
webSettings.setDatabasePath(databasePath);
webSettings.setGeolocationEnabled(true);
webSettings.setSaveFormData(true);
但是当加载应用程序时,在logcat中我可以看到以下内容
10-15 01:21:43.815:e/sqlitelog(14278):(1)没有这样的表:cachegroups
10-15 01:21:43.815:d/webkit(14278):错误:
10-15 01:21:43.815:d/webkit(14278):应用程序缓存存储:未能执行语句“delete from cachegroups”错误“no such table:cachegroups”
10-15 01:21:43.815:d/webkit(14278):外部/webkit/source/webcore/loader/appcache/applicationcachestorage.cpp(558):bool webcore::applicationcachestorage::executesqlcommand(const wtf::string&)
10-15 01:21:43.815:e/sqlitelog(14278):(1)没有这样的表:缓存
10-15 01:21:43.815:d/webkit(14278):错误:
10-15 01:21:43.815:d/webkit(14278):应用程序缓存存储:未能执行语句“delete from caches”错误“no such table:caches”
10-15 01:21:43.815:d/webkit(14278):外部/webkit/source/webcore/loader/appcache/applicationcachestorage.cpp(558):bool webcore::applicationcachestorage::executesqlcommand(const wtf::string&)
10-15 01:21:43.815:e/sqlitelog(14278):(1)无此表:来源
10-15 01:21:43.815:d/webkit(14278):错误:
10-15 01:21:43.815:d/webkit(14278):应用程序缓存存储:未能执行语句“delete from origins”错误“no such table:origins”
10-15 01:21:43.815:d/webkit(14278):外部/webkit/source/webcore/loader/appcache/applicationcachestorage.cpp(558):bool webcore::applicationcachestorage::executesqlcommand(const wtf::string&)
10-15 01:21:43.815:e/sqlitelog(14278):(1)没有这样的表:deletedcacheresources
很明显,appcache没有工作=/我做错什么了吗?谢谢!
最佳答案
在appcache和domstore之前设置db,
在set*enabled()之前设置任何“参数”,如set*path()/set*size()
除此之外,如果在使用
getActivity().getApplicationContext().getCacheDir().getAbsolutePath()
作为webview的缓存管理器存储其数据的目录
当活动的缓存管理器决定删除webview的缓存管理器创建的文件时,webview的缓存管理器不会收到通知,可能会进一步依赖它的存在。
可能工作很长时间,但有一天它可能会变成一个很难识别的交替错误