必须两次加载数据才能在 Android 中刷新 WebView
Posted
技术标签:
【中文标题】必须两次加载数据才能在 Android 中刷新 WebView【英文标题】:Had to load data twice to make WebView refresh in Android 【发布时间】:2013-07-04 07:44:54 【问题描述】:当我第一次创建活动时,一切都很好。但是,在我从菜单中选择更改字符串值的一些文本并通过
设置 webview 之后webview.loadData(result, "text/html; charset=UTF-8", null);
webview.loadData(result, "text/html; charset=UTF-8", null);
我必须这样做两次,否则 webview 将保持不变。有谁知道这里发生了什么?既然结果String是一样的,为什么webview强制我loadData两次呢?
【问题讨论】:
我遇到了完全相同的问题。你找到解决方法了吗? 不,我只是加载了两次。因为这总比不显示正确的东西要好。我认为可能与缓存有关。因此,如果您有时间,请尝试public void clearCache (boolean includeDiskFiles)
或public void clearHistory ()
看看是否有效。我只是没有时间测试它,因为我正忙于做其他事情。所以请告诉我他们是否工作。谢谢。
我发现了影响我案件的问题。我的 WebView 是 ViewSwitcher 的子视图。我将 WebView 嵌入到 LinearLayout 中,这就是导致 WebView 在第一次加载时不显示的原因。删除 LinearLayout 解决了这个问题。
谢谢。但在我的情况下,我没有布局。 public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); webview = new WebView(this); webview.getSettings().setBuiltInZoomControls(true); setContentView(webview);
【参考方案1】:
避免使用WebView#loadData(String data, String mimeType, String encoding) - 它有问题。
请改用WebView#loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)。
所以你的指令会是这样的:
webview.loadDataWithBaseURL(null,result,"text/html", "utf-8", null);
【讨论】:
它对我有用,实际上节省了我的一天。谢谢。你能解释一下第一个有什么问题吗? 不知道。看起来像个缺陷 不适合我。我在资产 wv.loadDataWithBaseURL("file:///android_asset/", sb.toString(), "text/html" , "utf-8", null); 中使用 css【参考方案2】:不知道你的问题是什么,但是查看 webview 文档,你错误地使用了 loadData 方法:
Webview:loadData documentation
你可能应该这样调用你的 webview:
webview.loadData(result, "text/html", "UTF-8");
不知道它是否能解决你的问题。
【讨论】:
对不起,你的答案还不够接近。只需去谷歌翻译并用您自己的语言写一些东西,然后将它们翻译成中文或日文。然后将这些字符复制到您的项目并比较我们的代码,您会发现我的网页视图与谷歌翻译相同,而您的网页视图中的字符错误。 确实,我的回答是绝对错误的:D 最后一个参数用于编码类型,如 Base64 或 ASCII。抱歉,我无法帮助您解决问题:/ 没关系。就像你以前一样,我在我的代码中犯了这个错误。 Aslo,仍然感谢您的努力。但是,如果是你标记的,请将答案移回 0。我的声望还不足以让它回到 0。【参考方案3】:是的,使用 loadDataWithBaseURL 它确实会刷新数据,但它会忽略 CSS 主体背景颜色! ...至少它无法解析与 loadData 一起使用的“%23000000”。
【讨论】:
【参考方案4】:我正在将本地 HTML 数据加载到我的 webview 中,这个 webview 在 recyclerview 中, 当我在第一次渲染时尝试 webview.loadData() 时它工作正常,但是当我向上向下滚动时,每个膨胀的 webview 都会变得一团糟。 当我尝试第二个 webview.loadDataWithBaseURL() 时,它的工作就像魅力一样。
所以,当您在本地加载 HTML 并且它引用了也在本地打包的图像和 css 等资产时,请使用 webview.loadDataWithBaseURL()
【讨论】:
以上是关于必须两次加载数据才能在 Android 中刷新 WebView的主要内容,如果未能解决你的问题,请参考以下文章
Android WebView JQuery 移动页面加载问题
使用 .on 和 .validate 的 jQuery 必须提交两次表单才能验证