我最近从android webview迁移到Crosswalk 13,唯一遇到的问题是告诉XWalkView从应用缓存中加载内容。
在我的android webview实现中,我实现了以下内容
//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内幕
xWalkSettings = new XWalkSettings(mainWebView.getContext(), null , false);
xWalkSettings.setAppCacheEnabled(true);然后修改我的循环任务
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实例,或者有没有其他方法来实现这一点?
发布于 2015-06-19 00:54:57
我从this link那里找到了一个方法。并稍微修改了一下。基本上需要使用反射来访问非公共(afaik)方法。
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();
}如果有更好、更干净的方法,我很想知道:)
发布于 2016-07-04 10:46:55
Crosswalk之前没有公开setCacheMode接口,但最近已经公开了,请参阅这个JIRA,https://crosswalk-project.org/jira/browse/XWALK-6832
它应该在Crosswalk 21中可用,您可以使用它,如下所示:
mXWalkView.getSettings().setCacheMode(XWalkSettings.LOAD_NO_CACHE);所以,好好享受吧..:)
https://stackoverflow.com/questions/30911615
复制相似问题