我有一个Android的Webview,当我点击一个链接下载一个文件(pdf等图像),我得到一个错误消息。
Error message:
Cannot call determinedVisibility() - never saw a connection for the pid
你知道我做错了什么吗?谁能帮忙?
只是一点配置:
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
我得到了同样的错误,Burhans的解决方案没有帮助我。我认为当你试图加载不同的url太快时,事情就出了问题。
编辑:找到了一个更好的解决方案,感谢user2652394WebView必须加载两次才能正确加载你必须这样做:
webView.postDelayed(new Runnable() {
@Override
public void run() {
webView.loadUrl(landingpage);
}
}, 500);
我也遇到过同样的问题。
通过给WebView一个静态高度(例如300dp)或指定minHeight值来解决。
这个问题在我的情况下产生的布局属性设置不正确。我用的是:
<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"的设置后,问题就解决了。
Background
这是浏览器引擎中方法的源代码,该方法给出错误 (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:..")
时,它有时会在之前执行页面已加载。
这是我如何修复一个类似的问题:
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(...
来晚了,但可能会有所帮助。可能听起来很傻,但我犯的错误是没有在URL的开头添加http://
。
检查Manifest文件的internet权限设置是否正确。确保权限标签应该在Application标签的之外。
<uses-permission android:name="android.permission.INTERNET" />
我通过使用onPageFinished
方法而不是shouldOverrideUrlLoading
找到了一个解决方案。它还在参数列表中提供所需的URL。
唯一的技巧是设置一个检查,以便在页面加载本身调用onPageFinished
时不会触发方法的主要逻辑(在我的例子中是制作Toast)。
mWebView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition,
String mimetype, long contentLength) {
Log.d("download",url);
}
});
我也面临同样的问题。我可以通过给出这个代码来解决我的问题:
webView.postDelayed(new Runnable() {
@Override
public void run() {
webView.loadUrl(url);
}
}, 500);
代替:
webview.loadUrl(url);
则设置url
开头为https://