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

时间:2015-10-12 13:57:28

标签: java android file webview download

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

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

知道我做错了什么吗?谁可以帮忙!?

11 个答案:

答案 0 :(得分:16)

只需一点配置:

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

答案 1 :(得分:5)

我得到了同样的错误,Burhans解决方案没有帮助我。 当你试图加载不同的网址时,我认为出了问题。

编辑:找到更好的解决方案信用转到user2652394 WebView must be loaded twice to load correctly

你必须做这样的事情:

except

答案 2 :(得分:3)

在我的情况下,这个问题是由布局属性中的错误设置产生的。我用过:

    <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”设置时,问题已经解决。

答案 3 :(得分:3)

背景

以下是浏览器引擎方法的源代码,它提供了错误 BindingManagerImpl.java ),来自Chromium source

@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:..")时,有时会在之前执行 < /强>  页面已加载。

详细

有关详细信息,请参阅 this stackoverflow answer。

答案 4 :(得分:2)

我遇到了同样的问题。

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

答案 5 :(得分:2)

这就是我修复类似问题的方法:

    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(...

答案 6 :(得分:1)

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

答案 7 :(得分:0)

检查是否在Manifest文件上正确设置了Internet权限。确保应用标记的权限标记应在之外。

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

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

答案 8 :(得分:0)

我使用shouldOverrideUrlLoading方法代替onPageFinished找到了解决方法。它还在参数列表中提供了所需的URL。

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

我遇到了同样的问题。我可以通过提供此代码来解决我的问题:

webView.postDelayed(new Runnable() {
        @Override
        public void run() {
            webView.loadUrl(url);
        }
    }, 500);

而不是:

webview.loadUrl(url);

然后,将url开头设置为https://