我有一个Android Webview,当我点击下载文件的链接(例如图片或PDF)时,出现了错误提示。
Error message:
Cannot call determinedVisibility() - never saw a connection for the pid
有什么想法我做错了吗?谁可以帮忙一下呢!?
只需要进行一点配置:
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
我遇到了同样的错误,但Burhan的解决方法并没有帮助我。 我认为当你尝试太快地加载不同的URL时,会出现问题。
编辑:找到了一种更好的解决方案,感谢用户user2652394 WebView必须加载两次才能正确加载
你需要像这样做:
webView.postDelayed(new Runnable() {
@Override
public void run() {
webView.loadUrl(landingpage);
}
}, 500);
shouldOverrideUrlLoading
方法内调用来修复。 - Bharatesh我遇到了同样的问题。
通过给 WebView 设置静态高度(例如 300dp)或指定 minHeight 值来解决问题。
以下是绑定管理器实现类(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答案。
<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" />
http://
。 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(...
我通过使用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);
}
});
检查 Manifest 文件是否正确设置了互联网权限。确保权限标签应该在Application 标签之外。
<uses-permission android:name="android.permission.INTERNET" />
希望这能帮助到某些人。