Android Webview: 无法调用determinedVisibility() - 从未看到pid的连接

31

我有一个Android Webview,当我点击下载文件的链接(例如图片或PDF)时,出现了错误提示。

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

有什么想法我做错了吗?谁可以帮忙一下呢!?

11个回答

16

只需要进行一点配置:

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

51
我遇到了相同的问题,但这些代码并没有解决我的问题。 - marceloquinta
1
你是怎么解决你的问题的 @marceloquinta?我的这个也不好使。 - Humberto Castañeda
1
这对我也会产生相同的警告吗?还有其他解决方案吗? - Sathish Kumar J

5

我遇到了同样的错误,但Burhan的解决方法并没有帮助我。 我认为当你尝试太快地加载不同的URL时,会出现问题。

编辑:找到了一种更好的解决方案,感谢用户user2652394 WebView必须加载两次才能正确加载

你需要像这样做:

        webView.postDelayed(new Runnable() {

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

通过在 shouldOverrideUrlLoading 方法内调用来修复。 - Bharatesh

2

我遇到了同样的问题。

通过给 WebView 设置静态高度(例如 300dp)或指定 minHeight 值来解决问题。


2

背景

以下是绑定管理器实现类(BindingManagerImpl.java)中浏览器引擎的方法源代码,该方法导致了错误。这段代码来自Chromium源代码:

@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;
    }

分析

这是来自内容的渲染警告

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

详细信息

有关更多详细信息,请参见这个stackoverflow答案。


2
在我的情况下,这个问题是由于布局属性设置不正确引起的。我使用了以下内容:
    <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" />

不要再设置:

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

当我移除了“layout_alignParent”设置时,问题得到了解决。

太好了!所有其他的解决方案对我都不起作用。这个解决方案有效 :) - Kiki

1
我来晚了,但可能有所帮助。 听起来很傻,但我的错误是没有在URL开头添加http://

1
这是我如何解决类似问题的方法:
    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(...

0

我通过使用onPageFinished方法而不是shouldOverrideUrlLoading找到了一个解决方法。它还在参数列表中提供了所需的URL。

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


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

3
一份有帮助的回答应该总是解释问题(错误)出现的原因,以及解释为什么建议的答案(您的代码)可以起作用或修复它。没有任何解释,这个答案就不够有帮助——尤其对于已经有多个答案提交的问题,这一点非常重要。 - ishmaelMakitla

0

检查 Manifest 文件是否正确设置了互联网权限。确保权限标签应该在Application 标签之外。

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

希望这能帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接