首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crosswalk 13:设置缓存模式

Crosswalk 13:设置缓存模式
EN

Stack Overflow用户
提问于 2015-06-18 17:31:18
回答 2查看 3.1K关注 0票数 0

我最近从android webview迁移到Crosswalk 13,唯一遇到的问题是告诉XWalkView从应用缓存中加载内容。

在我的android webview实现中,我实现了以下内容

代码语言:javascript
复制
//check connection on a loop
public void CheckConnectivityTask(){


    new AsyncTask<Void, Void, Void>() {         
        @Override
        protected Void doInBackground(Void... params) {

            //runs every 0.5s
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {

            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            CheckConnectivity(true);
        }

    }.execute();
}


public void CheckConnectivity(boolean recursiveTask){
    cm = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE);
    if(cm != null && cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()){
        Log.v("ConnectivityGG", "IS CONNECTED");
        mainWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    }
    else{
        mainWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    }
    if(recursiveTask){
        CheckConnectivityTask();
    }
}

由于getSettings()现已从XWalk 13中删除,我一直在尝试使用XWalkSettings来设置它

MainActivity中的OnCreate内幕

代码语言:javascript
复制
xWalkSettings = new XWalkSettings(mainWebView.getContext(), null , false);
xWalkSettings.setAppCacheEnabled(true);

然后修改我的循环任务

代码语言:javascript
复制
public void CheckConnectivity(boolean recursiveTask){
    cm = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE);
    if(cm != null && cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()){
        xWalkSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
    }
    else{
        xWalkSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    }
    if(recursiveTask){
        CheckConnectivityTask();
    }
}

但是,任何尝试加载缓存页面的操作都会失败,并显示"Internet connection has lost“警告对话框。我是不是错误地实例化了XWalkSettings实例,或者有没有其他方法来实现这一点?

EN

回答 2

Stack Overflow用户

发布于 2015-06-19 00:54:57

我从this link那里找到了一个方法。并稍微修改了一下。基本上需要使用反射来访问非公共(afaik)方法。

代码语言:javascript
复制
Method ___getBridge;
    try {
        ___getBridge = XWalkView.class.getDeclaredMethod("getBridge");
        ___getBridge.setAccessible(true);
         XWalkViewBridge xWalkViewBridge = null;
        xWalkViewBridge = (XWalkViewBridge)___getBridge.invoke(mainWebView);
        xWalkSettings = xWalkViewBridge.getSettings();
        xWalkSettings.setAppCacheEnabled(true);
    } catch (NoSuchMethodException e1) {
        // TODO Auto-generated catch block
        //e1.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        //e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        //e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        //e.printStackTrace();
    }

如果有更好、更干净的方法,我很想知道:)

票数 1
EN

Stack Overflow用户

发布于 2016-07-04 10:46:55

Crosswalk之前没有公开setCacheMode接口,但最近已经公开了,请参阅这个JIRA,https://crosswalk-project.org/jira/browse/XWALK-6832

它应该在Crosswalk 21中可用,您可以使用它,如下所示:

代码语言:javascript
复制
mXWalkView.getSettings().setCacheMode(XWalkSettings.LOAD_NO_CACHE);

所以,好好享受吧..:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30911615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档