web-dev-qa-db-de.com

Android WebView lädt keine URL?

Ich habe ein Android WebView, das die folgenden URLs laden sollte:

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

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

Folgendes habe ich getan:

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

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

Der Bildschirm ist leer, wenn ich meine Aktivität beginne.

Hinweis: Dies ist kein Layoutproblem. Bitte kommentieren Sie das Layout nicht und konzentrieren Sie sich auf das eigentliche Problem.

Wie kann ich die oben genannten URLs in einem WebView laden?

Bearbeiten: Hier sind die Berechtigungen, die ich gegeben habe:

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

Bearbeiten:

In meiner Konsole bekomme ich folgendes:

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

Das erste Problem ist, dass Sie die Position von ProgressBar und WebView austauschen müssen.

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

Das zweite Problem ist diese Zeile:

Android:layout_above="@+id/progressBar"

Innerhalb eines RelativeLayout müssen Sie die View-ID vorher deklariert haben, damit eine andere View oben angeordnet werden kann (rechts, links ist der gleiche Weg). 

Und wieder ist die gleiche Zeile:

Android:layout_above="@+id/progressBar"

In einer relativen Ansicht kann eine Ansicht nicht über (oder nach unten, von links nach rechts) auf eine ID festgelegt werden, die für nichts generiert wird. 

Sie machen

@+id/progressBar

die IDE generiert automatisch eine neue ID. Diese ID ist nicht die gleiche ID, die Sie für das WebView-Layout angeben. Und in Ihrer ProgressBar-Deklaration, Sie @ + id/progressBar erneut, die eine andere ID generiert.

Ihr WebView ist also zu nichts übersichtlich gestaltet, Sie können das WebView nicht einmal sehen, es kann die URLs laden und Sie können es einfach nicht sehen.

Viel Glück.

7

Ihre URL ist https. Es ist also ein SSL-Problem.

Eine Lösung finden Sie in andere Frage .

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: Mit setJavaScriptEnabled(false); kann die URL "https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655" erfolgreich im WebView angezeigt werden.

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

Ich habe Ihren gesamten Code verwendet, hier das Ergebnis meiner Webansicht. Ich denke, dass diese Website nicht für Mobilgeräte geeignet ist, weil ich versucht habe, Ihre 2 URLs in einem Webbrowser in meinem Telefon zu öffnen.

 enter image description here

3
BNK

wenn Sie möchten, können Sie versuchen, das Beispiel für den Fortschrittsbalken zu verwenden und setWebChromeClient zu entfernen. Versuchen Sie diesen Code:

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

Dies kann Ihr Problem lösen: 

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

Ich bin auf dasselbe Problem gestoßen. Das Festlegen von useWideViewPort in den WebView-Einstellungen auf true hat das Problem behoben. WebView#getSettings().setUseWideViewPort(true);

0
mag

Stellen Sie sicher, dass Sie alle Berechtigungen in der Manifestdatei außerhalb des Anwendungs-Tags ablegen.

0
Akhilesh Kumar