Ответ 1
Просто немного конфигурации:
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
У меня есть Android-представление Android, и когда я нажимаю ссылку для загрузки файла (изображение pdf и т.д.), я получил сообщение об ошибке.
Error message:
Cannot call determinedVisibility() - never saw a connection for the pid
Любая идея, что я делаю неправильно? Кто может помочь, пожалуйста!
Просто немного конфигурации:
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
У меня такая же ошибка, и решение Burhans не помогло мне. Я думаю, что все пошло не так, когда вы пытаетесь загрузить разные URL-адреса слишком быстро.
Изменить: Найдены лучшие кредиты для решения, перейдите на user2652394 WebView необходимо загрузить дважды, чтобы правильно загрузить
Вам нужно сделать что-то вроде этого:
webView.postDelayed(new Runnable() {
@Override
public void run() {
webView.loadUrl(landingpage);
}
}, 500);
Эта проблема в моем случае создает неправильные настройки в свойствах макета. Я использовал:
<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.
Я столкнулся с той же проблемой.
Была решена путем предоставления WebView статической высоты (т.е. 300 дп) или указания значения minHeight.
Вот как я исправил аналогичную проблему:
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(...
Поздно к партии, но может помочь некоторым.
Может показаться глупым, как черт, но ошибка, которую я сделал, не добавляла http://
в начало URL-адреса.
Вот исходный код метода в механизме браузера, который дает ошибку (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;
}
Это предупреждение рендеринга из содержимого.
Последовательные вызовы loadUrl
вызывают состояние гонки. Проблема в том, что loadUrl("file://..")
не выполняет немедленно, поэтому, когда вы вызываете loadUrl("javascript:..")
, она иногда выполняет до
страница загружена.
Подробнее см. этот ответ stackoverflow.
Проверьте, правильно ли установлено разрешение Интернета в файле манифеста. Убедитесь, что тег разрешений должен находиться вне вашего тега приложения.
<uses-permission android:name="android.permission.INTERNET" />
Надеюсь, это может помочь кому-то.
Я нашел обходное решение, используя onPageFinished
метод вместо shouldOverrideUrlLoading
. Он также предоставляет нужный URL-адрес в списке аргументов.
Единственный трюк - установить проверку так, чтобы основная логика метода (в моем случае создание Toast) не запускалась, когда onPageFinished
вызывается на самой загрузке страницы.
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://