wake-up-neo.net

android webview zeigt leere seite an

Ich habe eine Android-Anwendung, die ich mit dem Emulator entwickle, der auf Android 2.3.3 mit eingebettetem WebView in einem Framelayout ausgeführt wird, das in einem linearen Layout (vertikal) verschachtelt ist. Egal welchen Code ich verwende, macht eigentlich nie etwas. Ich habe Berechtigungen für die Android-Anwendung auf INTERNET gesetzt. .__ Auch wenn versucht wird, nur den HTML-Code zu laden. Ich bekomme eine leere weiße Seite, keine Fehler, nichts nichts. Auch nichts in Logcat.

WebView wview = (WebView)findViewById(R.id.webView1);
wview.getSettings().setJavaScriptEnabled(true);

Ich habe alle drei versucht, etwas in die Webansicht zu laden:

wview.loadUrl("http://www.google.com");
wview.loadData("<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8");
wview.loadDataWithBaseURL(null, "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8",null);

Alle drei geben mir die gleichen Ergebnisse. Nichts.

Irgendwelche Ideen?

15
Chris White
wbView.getSettings().setDomStorageEnabled(true);
22
zionpi

Es ist vielleicht etwas zu spät, aber ich wollte meine Erfahrungen mit Ihnen teilen, weil ich das gleiche Problem hatte und viel Zeit damit verbracht habe.

Setzen Sie Ihr WebView in RelativeLayout und nicht in FrameLayout.

Was ich getestet habe: Die onPageFinished() meines WebView wurde jedes Mal aufgerufen, aber auf dem Bildschirm wurde eine leere Seite angezeigt. Über den Debugger chrome://inspectWebView konnte ich mein WebView "pingen", indem ich die Schaltfläche inspect drückte. Danach wurde WebView sofort aktualisiert . Meine Gedanken - WebView wird in FrameLayout nicht korrekt wiedergegeben, und RelativeLayout behebt das Problem (sogar invalidate() und requestLayout() Aufrufe hat nicht geholfen).

12

Ich denke, wenn Sie etwas von Ihrem Code bearbeiten, wird es in Ordnung sein. Sehen Sie, wie ich es in meinem Fall mache. Versuchen Sie es auf diese Weise.
Zum Anzeigen einer Webseite

final WebView wbView = (WebView) findViewById(R.id.WebView);

wbView.getSettings().setJavaScriptEnabled(true); 
wbView.loadUrl("https://play.google.com/store/apps");
wbView.clearView();
wbView.measure(100, 100);
wbView.getSettings().setUseWideViewPort(true);
wbView.getSettings().setLoadWithOverviewMode(true);

Zum Anzeigen von HTML:
Sehen Sie dieses Tutorial. 

11
ridoy

clearView ist veraltet.

Benutzen:

webView.loadUrl("about:blank")
4
Yura Shinkarev

Ich habe +1 gegeben, weil beide eine gültige Unterstützung für die ordnungsgemäße Funktionsweise des Webview waren. Dies war jedoch keine Lösung für mein Problem.

Was ich nicht wusste, ist, dass ich ein wrap_content für das Include meines Webview-Layouts hatte. Dies hatte eine Höhe von 0px zur Folge. Durch die Einstellung von fill_parent wurde das Problem behoben. (Webview mit weißem Hintergrund und App mit weißem Hintergrund können Sie nicht wirklich die volle Höhe sagen, wenn sie im Layout-Designer als volle Höhe angezeigt wird.)

Vielen Dank für Ihre Hilfe!

4
Chris White

anstatt null zu übergeben, sollten Sie ein leeres String übergeben. Beispiel: ""
Also solltest du es so nennen:
wview.loadDataWithBaseURL("", "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8","");

4
AbdulHannan

Ändern Sie wrap_content in fill_parent in Ihrem Webview-Layout. es hat für mich funktioniert

2

Ich denke, was Sie brauchen, ist WebViewClient. Nach dem Festlegen des webviewclient-Aufrufs webview.loadUrl (_url); Etwas wie dieses ....

private void loadUrlInWebView(String _URL){
    WebView myWebView = (WebView) findViewById(R.id.webviewer);     

    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setLoadWithOverviewMode(true);

    myWebView.setWebViewClient(new MyWebViewClient());
    myWebView.loadUrl(_URL);
}

private class MyWebViewClient extends WebViewClient{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {         

            view.loadUrl(url);

        return true;
    }

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
    }
}
1
user4115463

Wenn es immer noch nicht funktioniert, dann fügen Sie bitte vor der Webadresse "http: //" oder "https: //" ein.

0
Shez Ratnani

Erhöhen Sie den RAM für Ihr emuliertes Gerät. Das hat das Problem für mich gelöst.

Ich fand das heraus, indem ich die Logcat-Meldungen in Android Monitor (Android Studio) anschaute. Die folgenden Nachrichten brachten mich auf die Idee, was falsch an der Erhöhung von RAM war:

W/art: Throwing OutOfMemoryError "Failed to allocate a 6635532 byte allocation with 1170528 free bytes and 1143KB until OOM"

W/JavaBrowserViewRendererHelper: Error allocating bitmap

E/chromium: [ERROR:Java_browser_view_renderer_helper.cc(132)] Error unlocking Java bitmap pixels.
0
Nelson

Sie können den folgenden Code verwenden, dies wird hilfreich sein:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals("www.example.com")) {
            // This is my web site, so do not override; let my WebView load the page
            return false;
        }
        // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }
}
0
Anchal Radhwani

verwenden Sie die IP-Adresse anstelle der Web-URL und überschreiben Sie den Webclient mit der folgenden Fehlerbehandlungsmethode

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

Mein Webview zeigte darüber ein weißes leeres Quadrat, manchmal völlig leer. Dies trat nur auf, wenn bestimmte Daten geladen wurden.

Das Ändern in RelativeLayout und das Setzen von layout_height auf match_parent hat für mich funktioniert.

<RelativeLayout xmlns:Android=...
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <RelativeLayout
        Android:id="@+id/ll_title"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_marginTop="3dp"
        Android:gravity="center_vertical"
        Android:orientation="horizontal">

        .....

    </RelativeLayout>

    <WebView
        Android:id="@+id/web_view"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_below="@id/ll_title"
        Android:background="@color/colorYellow" />


    <ProgressBar
        Android:id="@+id/pb_spinning"
        style="?android:attr/progressBarStyleSmall"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerHorizontal="true"
        Android:layout_centerVertical="true"
        Android:visibility="gone" />

</RelativeLayout>
0
live-love