Java Android Webview:无法调用determinedVisibility() - 从未见过pid 的连接

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33083066/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 14:17:30  来源:igfitidea点击:

Android Webview: Cannot call determinedVisibility() - never saw a connection for the pid

javaandroidfilewebviewdownload

提问by Laurens V

I have a Android Webview and when I click on a link to download a file (image of pdf etc) I got a error message.

我有一个 Android Webview,当我单击链接下载文件(pdf 图像等)时,我收到一条错误消息。

Error message:
Cannot call determinedVisibility() - never saw a connection for the pid

Any idea what I do wrong? Who can help please!?

知道我做错了什么吗?请问谁能帮帮忙!?

采纳答案by Burhan ARAS

Just a bit of configuration:

只是一点配置:

    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setDomStorageEnabled(true);

回答by Dennis Allert

I got the same error and Burhans solution was not helping me. I think things went wrong when you′re trying to load different urls too fast.

我遇到了同样的错误,Burhans 解决方案对我没有帮助。我认为当您尝试过快加载不同的 url 时出现问题。

Edit: Found a better solution credits go to user2652394 WebView must be loaded twice to load correctly

编辑:找到一个更好的解决方案学分转到 user2652394 WebView 必须加载两次才能正确加载

You have to do something like this:

你必须做这样的事情:

        webView.postDelayed(new Runnable() {

            @Override
            public void run() {
                webView.loadUrl(landingpage);
            }
        }, 500);

回答by AlexVPerl

I faced the same issue.

我遇到了同样的问题。

Was solved by giving a WebView a static height (ie 300dp) or specifying minHeight value.

通过为 WebView 提供静态高度(即 300dp)或指定 minHeight 值来解决。

回答by manuel

This is how I fixed a similar issue:

这是我解决类似问题的方法:

    mWebView.setWebChromeClient(new WebChromeClient());
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setDomStorageEnabled(true);

    mWebView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view,String url) {
            return false;
        }
    });

    mWebView.loadURL(...

回答by Hessam J.E

This problem in my case produce by incorrect settings in layout properties. I had used:

在我的情况下,这个问题是由布局属性中的错误设置引起的。我曾经使用过:

    <WebView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/webView"
    android:layout_below="@+id/textView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="false"
    android:layout_alignWithParentIfMissing="false" />

Instead of setting:

而不是设置:

    <WebView
    android:id="@+id/webView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/textView" />

The problems had been solved, when I removed "layout_alignParent" settings.

当我删除“layout_alignParent”设置时,问题已经解决。

回答by Manu Antony

Check whether internet permission is properly set on the Manifest file. Make sure that the permission tag should be outsideof your Application tag.

检查清单文件是否正确设置了互联网权限。确保权限标签应该在您的应用程序标签之外。

<uses-permission android:name="android.permission.INTERNET" />

Hope this might help some one.

希望这可能对某人有所帮助。

回答by kashyap jimuliya

Late to party, but might help some. May sound silly as hell, but the mistake I made was not adding http://in the beginning of the URL.

聚会迟到,但可能会有所帮助。可能听起来很傻,但我犯的错误是没有http://在 URL 的开头添加。

回答by Bord81

I found a workaround by using onPageFinishedmethod instead of shouldOverrideUrlLoading. It also provides the needed URL in the list of arguments.

我通过使用onPageFinishedmethod 而不是shouldOverrideUrlLoading. 它还在参数列表中提供所需的 URL。

The only trick is to set a check so that the main logic of the method (in my case making a Toast) is not triggered when onPageFinishedgets called on the the page load itself.

唯一的技巧是设置一个检查,以便onPageFinished在页面加载本身上调用时不会触发该方法的主要逻辑(在我的例子中是一个 Toast)。

回答by Jon Goodwin

Background

背景

Here is the source code of the methodin the browser enginethat gives the error(BindingManagerImpl.java), from Chromium source:

这里是源代码方法浏览器引擎,使该误差BindingManagerImpl.java),从铬源

@Override
public void determinedVisibility(int pid) {
    ManagedConnection managedConnection;
    synchronized (mManagedConnections) {
        managedConnection = mManagedConnections.get(pid);
    }
    if (managedConnection == null) {
        Log.w(TAG, "Cannot call determinedVisibility() - never saw a connection for the pid: "
                + "%d", pid);
        return;
    }

Analysis

分析

It's a rendering warningfrom content.

这是来自内容的渲染警告

Consecutivecalls to loadUrlcause a race condition. The problem is that loadUrl("file://..")doesn'tcomplete immediately, and so when you call loadUrl("javascript:..")it will sometimes execute beforethe page has loaded.

连续调用loadUrl导致竞争条件。问题是它loadUrl("file://..")不会立即完成,因此当您调用loadUrl("javascript:..")它时,有时会页面加载之前执行。

Detail

细节

For more detail seethis stackoverflow answer.

有关更多详细信息,请参阅stackoverflow 答案。

回答by qingsong xu

mWebView.setDownloadListener(new DownloadListener() {
  @Override
  public void onDownloadStart(String url, String userAgent, String contentDisposition, 
    String mimetype, long contentLength) {
    Log.d("download",url);
  }
});