web-dev-qa-db-fra.com

Android Webview: Impossible d'appeler DetermineVisibility () - Jamais vu une connexion pour le pid

J'ai un Android Webview et lorsque je clique sur un lien pour télécharger un fichier (image de pdf, etc.), je reçois un message d'erreur.

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

Une idée de ce que je fais mal? Qui peut aider s'il vous plaît!?

30
Laurens V

Juste un peu de configuration:

    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setDomStorageEnabled(true);
16
Burhan ARAS

J'ai la même erreur et la solution de Burhan ne m'aidait pas. Je pense que les choses se sont mal passées lorsque vous avez essayé de charger plusieurs URL trop rapidement.

Edit: Vous avez trouvé une meilleure solution. Allez à user2652394 WebView doit être chargé deux fois pour se charger correctement

Vous devez faire quelque chose comme ça:

        webView.postDelayed(new Runnable() {

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

Contexte

Voici le code source de la méthode dans le moteur de navigateur qui donne l'erreur ( BindingManagerImpl.Java ), à partir de source de chrome :

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

Une analyse

C'est un avertissement de rendu à partir du contenu.

Les appels consécutifs à loadUrl provoquent une condition de concurrence . Le problème est que loadUrl("file://..") ne se termine pas immédiatement . Ainsi, lorsque vous appelez loadUrl("javascript:.."), il sera parfois exécuté avant la page a été chargée.

Détail

Pour plus de détails, voir this stackoverflow answer.

3
Jon Goodwin

Ce problème dans mon cas produit par des paramètres incorrects dans les propriétés de présentation. J'avais utilisé:

    <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" />

Au lieu de mettre:

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

Les problèmes avaient été résolus lorsque j'ai supprimé les paramètres "layout_alignParent".

3
Hessam J.E

J'ai fait face au même problème.

A été résolu en donnant à une vue Web une hauteur statique (c'est-à-dire 300dp) ou en spécifiant la valeur minHeight.

2
AlexVPerl

Voici comment j'ai résolu un problème similaire:

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

Tard pour faire la fête, mais pourrait aider certains. Cela peut sembler idiot, mais l’erreur que j’ai commise n’a pas été d’ajouter http:// au début de l'URL.

1
kashyap jimuliya

Vérifiez si l'autorisation Internet est correctement définie dans le fichier Manifest. Assurez-vous que la balise d'autorisation doit être à l'extérieur de votre balise Application.

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

J'espère que cela pourrait aider quelqu'un.

0
Manu Antony

J'ai rencontré le même problème. Je peux résoudre mon problème en donnant ce code:

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

au lieu de:

webview.loadUrl(url);

puis, définissez le url commence par https://

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

J'ai trouvé une solution de contournement en utilisant la méthode onPageFinished à la place de shouldOverrideUrlLoading. Il fournit également l'URL nécessaire dans la liste des arguments.

La seule astuce consiste à définir une vérification de sorte que la logique principale de la méthode (dans mon cas, un Toast) ne soit pas déclenchée lorsque onPageFinished est appelé sur le chargement de la page.

0
Bord81