Android Webview上的Appcache没有下载源代码

时间:2012-10-14 23:32:41

标签: android webview html5-appcache

我知道我的网络应用程序的appcache工作得很好,因为我已经在Chrome上尝试过,即使在Chrome for Android上也能正常运行,但是当它从我的Android应用程序从webview加载时却没有。我有以下设置:

    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):external / 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):external / 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):external / 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没有工作= /我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:0)

在appcache和domstore之前设置db, 在set * Enabled()

之前设置任何“参数”,如set * Path()/ set * Size() 除此之外,如果在使用时将两个独立管理的缓存堆叠在一起可能不是一个好主意

getActivity()。getApplicationContext()。getCacheDir()。getAbsolutePath()

作为webview的缓存管理器应存储其数据的目录

当活动的缓存管理器决定删除webview的缓存管理器创建的文件时,webview的缓存管理器不会被通知,并且可能进一步依赖它存在

可能会工作很长时间,但有一天它可能会变成一个很难识别的交替错误

答案 1 :(得分:0)

这些设置对我有用:

CookieSyncManager.createInstance(contextForDialog);
webView = (WebView) findViewById(R.id.webView1);

WebSettings settings = webView.getSettings();

settings.setRenderPriority(RenderPriority.HIGH);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);

settings.setSaveFormData(true);
settings.setLoadsImagesAutomatically(true);
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);
settings.setAppCacheMaxSize(1024*1024*1024*8);
String sDataPath = context.getDir("database", Context.MODE_PRIVATE).getPath();
settings.setDatabasePath(sDataPath);
settings.setAppCachePath(sDataPath);
settings.setAllowFileAccess(true);
settings.setAppCacheEnabled(true);
settings.setAllowFileAccess(true);
settings.setGeolocationEnabled(true);
settings.setSavePassword(true);

webView.setFocusable(true);
webView.setFocusableInTouchMode(true);
settings.setDatabaseEnabled(true);
settings.setAllowContentAccess(true);
settings.setLoadsImagesAutomatically(true);
webView.addJavascriptInterface(this, "AndroidInterface");
WebView.setWebViewClient(new routeNavClient());
webView.setWebChromeClient(new webChromeClient());
CookieManager c = CookieManager.getInstance();
c.setAcceptCookie(true);