web-dev-qa-db-fra.com

Android WebView ne charge pas l'URL?

J'ai un WebView Android qui devrait charger les URL suivantes: 

https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655

https://buchung.salonmeister.de/place/#offer-details-page?id=907599&venueId=301655

Voici ce que j'ai fait: 

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
                xmlns:tools="http://schemas.Android.com/tools"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:background="@Android:color/holo_orange_light"
                tools:context=".MainActivityFragment">



    <WebView
        Android:id="@+id/webView"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_alignParentBottom="true"
        Android:layout_margin="5dp"
        Android:layout_above="@+id/progressBar"></WebView>


    <ProgressBar
        Android:id="@id/progressBar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:visibility="invisible"
        style="?android:attr/progressBarStyleHorizontal"/>

    <TextView
        Android:id="@+id/titleView"
        Android:text="@string/hello_world"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"/>

</RelativeLayout>

Dans onCreateView():

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {
       View v = inflater.inflate(R.layout.fragment_main, container, false);

        String url = // some url
        final ProgressBar progressBar = (ProgressBar)v.findViewById(R.id.progressBar);
        progressBar.setMax(100);

        final TextView titleView = (TextView)v.findViewById(R.id.titleView);


        mWebView = (WebView)v.findViewById(R.id.webView);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setAllowFileAccess(true);
        mWebView.getSettings().setAllowContentAccess(true);

        mWebView.setWebViewClient(new WebViewClient() {
          @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
          }
        });

        mWebView.setWebChromeClient(new WebChromeClient() {
          @Override
          public void onProgressChanged(WebView view, int progress) {
            if (progress == 100) {
              progressBar.setVisibility(View.INVISIBLE);
              progressBar.setProgress(0);
            } else {
              progressBar.setVisibility(View.VISIBLE);
              progressBar.setProgress(progress);
            }
          }

          @Override
          public void onReceivedTitle(WebView view, String title) {
            titleView.setText(title);
          }
        });
        mWebView.loadUrl(url);

        return v;
}

L'écran est vide lorsque je commence mon activité. 

Remarque: Ce n'est pas un problème de mise en page. Veuillez ne pas commenter la mise en page et vous concentrer sur le vrai problème.

Comment puis-je charger les URL ci-dessus dans une WebView?

Edit: Voici les permissions que j'ai données: 

    <uses-permission Android:name="Android.permission.INTERNET" />
    <uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
    <uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
    <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />

Modifier: 

Dans ma console, j'ai le message suivant: 

I/chromium: [INFO:CONSOLE(84)] "undefined", source: https://buchung.salonmeister.de/place/ (84)

09-13 15:12:33.230 28407-28407/de.test.webviewtest I/chromium: [INFO:CONSOLE(1)] "Uncaught Error: Script error for: widget/venue-menu/mobile/venue-menu-app
09-13 15:12:33.230 28407-28407/de.test.webviewtest I/chromium: http://requirejs.org/docs/errors.html#scripterror", source: https://buchung.salonmeister.de/javascript-module/1.162.3/thirdparty/require.2.1.10.js (1)
11
confile

Le premier problème est que vous devez échanger la position de ProgressBar et WebView.

<ProgressBar
    Android:id="@id/progressBar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:visibility="invisible"
    style="?android:attr/progressBarStyleHorizontal"/>

<WebView
    Android:id="@+id/webView"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentTop="true"
    Android:layout_alignParentBottom="true"
    Android:layout_margin="5dp"
    Android:layout_above="@id/progressBar"/> 

Le deuxième problème est cette ligne:

Android:layout_above="@+id/progressBar"

À l'intérieur d'un RelativeLayout, vous devez avoir déclaré l'identifiant de la vue à l'avance, afin qu'une autre vue puisse être mise en haut au-dessus (à droite, à gauche, de la même manière). 

Et encore est la même ligne:

Android:layout_above="@+id/progressBar"

Dans une vue relative, une vue ne peut pas mettre en haut (ou en bas, de gauche à droite) un ID qui est généré pour rien. 

Tu fais

@+id/progressBar

le IDE générera automatiquement un nouvel ID. Cet ID n'est pas le même ID que celui que vous voulez utiliser pour la mise en page WebView. Et dans votre déclaration ProgressBar, vous @ + id/progressBar à nouveau, ce qui générera un autre identifiant.

Donc, votre WebView est mise en page ci-dessus à rien, vous ne pouvez même pas voir la WebView, il peut charger les URL, et vous ne pouvez pas le voir.

Bonne chance.

7
Daniel Martin Shum

Votre URL est https, donc c’est un problème SSL.

Vous pouvez trouver une solution dans autre question .

mWebView.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed(); // Ignore SSL certificate errors
    }
});
4
Hogun

UPDATE: avec setJavaScriptEnabled(false);, l’URL "https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655" peut s’afficher avec succès dans WebView.

 enter image description here

public class WebViewActivityFragment extends Fragment {

    public WebViewActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //return inflater.inflate(R.layout.fragment_web_view, container, false);

        View v = inflater.inflate(R.layout.fragment_web_view, container, false);

        final String url = "https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655";//"https://google.com.vn";
        final ProgressBar progressBar = (ProgressBar)v.findViewById(R.id.progressBar);
        progressBar.setMax(100);
        final TextView titleView = (TextView)v.findViewById(R.id.titleView);
        WebView mWebView = (WebView) v.findViewById(R.id.webView);
        mWebView.setInitialScale(1);
        mWebView.getSettings().setLoadWithOverviewMode(true);
        mWebView.getSettings().setUseWideViewPort(true);
        mWebView.getSettings().setJavaScriptEnabled(false);
        mWebView.getSettings().setAllowFileAccess(true);
        mWebView.getSettings().setAllowContentAccess(true);
        mWebView.setScrollbarFadingEnabled(false);
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });

        mWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int progress) {
                if (progress == 100) {
                    progressBar.setVisibility(View.INVISIBLE);
                    progressBar.setProgress(0);
                } else {
                    progressBar.setVisibility(View.VISIBLE);
                    progressBar.setProgress(progress);
                }
            }

            @Override
            public void onReceivedTitle(WebView view, String title) {
                titleView.setText(title);
            }


        });
        mWebView.loadUrl(url);

        return v;
    }
}

J'ai utilisé tout votre code, voici le résultat de ma vue Web. Je pense que ce site Web n’est peut-être pas prêt pour la téléphonie mobile, car j’ai essayé d’ouvrir vos deux URL dans le navigateur Web de mon téléphone en raison du même problème (chargement en cours ...)

 enter image description here

3
BNK

si vous le souhaitez, vous pouvez utiliser Exemple de barre de progression indéterminée et supprimer setWebChromeClient Essayez le code suivant:

public class WebViewActivityFragment extends Fragment {

 public WebViewActivityFragment() {
 }

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    //return inflater.inflate(R.layout.fragment_web_view, container, false);

    View v = inflater.inflate(R.layout.fragment_web_view, container, false);

    final String url = "https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655";//"https://google.com.vn";
    final ProgressBar progressBar = (ProgressBar)v.findViewById(R.id.progressBar);
    progressBar.setMax(100);
    progressBar.setVisibility(View.GONE);
    final TextView titleView = (TextView)v.findViewById(R.id.titleView);
    WebView mWebView = (WebView) v.findViewById(R.id.webView);
    mWebView.setInitialScale(1);
    mWebView.getSettings().setLoadWithOverviewMode(true);
    mWebView.getSettings().setUseWideViewPort(true);
    mWebView.getSettings().setJavaScriptEnabled(false);
    mWebView.getSettings().setAllowFileAccess(true);
    mWebView.getSettings().setAllowContentAccess(true);
    mWebView.setScrollbarFadingEnabled(false);
    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }

         @Override
        public void onPageFinished(WebView view, String url) {
         progressBar.setVisibility(View.GONE);
         progressBar.setProgress(100);
         super.onPageFinished(view, url);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
         progressBar.setVisibility(View.VISIBLE);
         progressBar.setProgress(0);
         super.onPageStarted(view, url, favicon);
        }
    });


    mWebView.loadUrl(url);

    return v;
}

}

3
felli mohamed hedi

Cela peut résoudre votre problème: 

webView.post(new Runnable() {
    @Override
    public void run() {
        webView.loadUrl(url);
    }
});
0
Nicolas Cornette

Assurez-vous de mettre toutes les autorisations dans le fichier manifeste en dehors de la balise d'application.

0
Akhilesh Kumar