当前位置: 首页 > 知识库问答 >
问题:

Android 4.4在WebView back的onReceivedError中给出ERR_CACHE_MISS错误

家志学
2023-03-14

我的布局中有一个webview。默认情况下,在其中打开搜索表单。在搜索时,搜索表单下面会出现一个列表部分。如果单击列表中的任何链接,则打开详细信息页。现在我想控制WebView的后退导航。我把这个代码放在活动中。

    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {

            Log.d("TYPE", TYPE);

            WebView myWebView = null;
            if (TYPE.equalsIgnoreCase("REPORT_ACTIVITY"))
                myWebView = reportView;

            if (TYPE.equalsIgnoreCase("FEEDBACK_ACTIVITY"))
                myWebView = feedbackView;

            if (myWebView != null)
                // Check if the key event was the Back button and if there's history
                if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
                    myWebView.goBack();
                    return true;
                }
            // If it wasn't the Back key or there's no web page history, bubble up
            // to the default
            // system behavior (probably exit the activity)
            return super.onKeyDown(keyCode, event);
        }

private WebViewClient webViewClient = new WebViewClient() {
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
            Log.d("onPageStarted", "onPageStarted");
            loadProgressBarBox.setVisibility(View.VISIBLE);
            //view.setVisibility(View.GONE);
        }

        public void onPageFinished(WebView view, String url) {
            Log.d("onPageFinished", "onPageFinished");
            loadProgressBarBox.setVisibility(View.GONE);
        }

        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {

            Log.d("Error", "Error code: " + errorCode + "/" + description);
       }

}
09-04 06:59:05.666: D/Error(1102): Error code: -1/net::ERR_CACHE_MISS

在Android4.4中如何解决这个问题?

共有1个答案

虞承泽
2023-03-14

在大多数情况下,这个错误实际上来自应用程序之外(偶尔只是缺少internet权限,但这里听起来不是这样)。

我正在输入一个解释,但发现了一个更直接的例子,在这个答案中可以同时解释另一个问题。以下是相关的部分,重新散列了一下:

  1. 乔用他的信用卡信息填写订单表
  2. 服务器处理该信息并返回一个确认/接收页面,该页面在标题中标有no-cache,这意味着将始终从服务器请求该信息。
  3. 乔转到另一页。
  4. 乔点击后退,因为他想再次检查一些内容,并将他带到确认页。

这将导致Joe两次收到账单,因为新的请求与上次的信息相同。当乔发现他的账户上有两笔费用和他家门口多了一对帐篷时,他不会是一个快乐的露营者。

这种情况似乎很常见,现在已经成为大多数浏览器的标准错误,显然,更新版本的Android也是如此。这个错误实际上来自Chromium,这就是为什么您会在Google Chrome中看到同样的错误,也是为什么您只在4.4中看到它(该版本引入了基于Chromium的WebView新版本)。

事实上,你可能以前见过它,它是在大多数浏览器中显示的警告信息,类似于“要刷新此页面,浏览器将不得不重新发送数据...yada yada yada”。

这是Android4.4的方式,警告你正在发生什么。如何修复它实际上取决于您连接的内容,但如果您搜索这种情况,您会发现它相当常见,并有修复方法。错误的确切触发器实际上是当请求不能从缓存中得到服务时(在本例中是no-cache造成的)。

根据请求的性质,可能实际上不需要无缓存

但从应用程序的角度来看,主要问题是,onreceiveerror是WebView的“最后手段”。您在那里得到的错误是从底层系统传播的。一旦你在那里结束,你就不能继续页面加载了。所以你没有机会允许重发,你也不能给用户这个选项,不像谷歌Chrome那样。

 类似资料:
  • 我建立了一个web应用程序,并希望创建一个android应用程序,它有一个显示我的web应用程序的webview。按照Google Developer的说明创建了一个应用程序后,我成功地用Android5.1.1将它安装在了我的手机上。 NET::ERR_CACHE_MISS

  • 问题内容: 我的编码是 错误是 问题答案: NLTK中的MaltParserAPI仅有一个修补程序,该修补程序修复并稳定了其以前存在的问题: 这是如何在NLTK中使用MaltParser API的示例: (参见这里更多的演示代码或这里的比较详细的演示代码) 请注意,您还可以使用导出功能,并且可以在初始化对象时避免使用完整路径。但是您仍然必须告诉对象要查找的解析器目录的名称和模型文件名,例如

  • 问题内容: 我正在使用IntelliJ中的Google App Engine。我正在尝试在我的JSP中使用JSTL标记。我尝试了在互联网上找到的两个不同的URI,它们都给我错误: 和 它将网址变红并表示无法解析taglib。我尝试删除URL的不同部分以查看是否- 给我任何自动完成的爱,但没有运气。 我需要做些什么才能使这项工作吗? 问题答案: 确保将JSTL库jar添加到模块依赖项中。

  • 我正在尝试仅从我的应用程序发送彩信。在android开发者教程的帮助下,我把它变成了默认的消息应用(http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html). 我的清单: BroadcastReceiver监听传入的SMS消息: 监听传入彩信的BroadcastRecenc

  • 我使用和以及开发了一个Java web应用程序。我的应用程序在本地pc上运行,没有任何错误。 但是在我托管了我的应用程序之后,我无法访问servlet。它给了我错误。我不习惯在我的应用程序中映射servlet。我使用了。 托管服务器使用和。 可能是什么问题?我该怎么解决这个问题? 新更新 我购买主机的地方给了我上传文件的。tomcat中没有上传文件的地方,也没有上传文件到director的地方。所