So laden Sie eine externe Webseite in WebView

120

Mein Problem ist, dass die Webseite nicht in die Webansicht geladen wird.

mWebview.loadUrl("http://www.google.com"); startet den Webbrowser ...

Dies ist der Code meiner Aktivität:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class Main extends Activity {

    private WebView mWebview;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mWebview = new WebView(this);
        mWebview.loadUrl("http://www.google.com");
        setContentView(mWebview);
    }   
}

Ich habe die erforderliche Berechtigung im Manifest hinzugefügt:

<uses-permission android:name="android.permission.INTERNET" />
Gilbou
quelle
Hallo Gilbou, dein Code funktioniert in 2.2
Dipak Keshariya
Aber nicht bei mir :( Weder auf dem HTC Wildfire noch auf dem Emulator ... Ich verstehe es einfach nicht.
Gilbou
1
Ok ... jetzt funktioniert es. Es wird jedoch der Webbrowser gestartet, anstatt die Seite in der Webansicht anzuzeigen.
Gilbou
Hallo, dies bedeutet, wenn UR diesen Code ausführt, ist der Browser geöffnet.
Dipak Keshariya
Sie brauchen wirklich dieses Tutorial Link Android Webview Beispiel
Athira Reddy

Antworten:

224

Dank dieses Beitrags habe ich endlich die Lösung gefunden. Hier ist der Code:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.annotation.TargetApi;

public class Main extends Activity {

    private WebView mWebview ;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        mWebview  = new WebView(this);

        mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript

        final Activity activity = this;

        mWebview.setWebViewClient(new WebViewClient() {
            @SuppressWarnings("deprecation")
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
            }
            @TargetApi(android.os.Build.VERSION_CODES.M)
            @Override
            public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
                // Redirect to deprecated method, so you can use it in all SDK versions
                onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
            }
        });

        mWebview .loadUrl("http://www.google.com");
        setContentView(mWebview );

    }

}
Gilbou
quelle
Schöne Sache, aber ich möchte das Web seitenweise anzeigen. Ist es mit Webview möglich?
Zala Janaksinh
16
Vergessen Sie nicht, die Berechtigung hinzuzufügen <Verwendungsberechtigung android: name = "android.permission.INTERNET" />
star18bit
2
Um mit der URL in Ihrer Webansicht umgehen zu können, sollten Sie einen Webviewclient festlegen. Wenn Sie keinen Client festlegen, wird standardmäßig eine Anwendung gestartet, die URLs verarbeitet. Siehe diesen Link
erdemlal
2
Durch das Aktivieren des Java-Skripts wird Ihre App für potenzielle Sicherheitsprobleme geöffnet, und ich bin sicher, dass Android SDK Sie davor warnt, wenn Sie es im Code verwenden. Tun Sie dies nur, wenn Sie steuern können, welche Websites in Ihrer Webansicht angezeigt werden. Das Aktivieren von Java-Skripten sollte nicht als einfache Lösung angesehen werden.
LostPuppy
1
Diesen Code nicht öffnen. AnzeigenWebpage not available
Ranjith Kumar
44

Versuche dies

webviewlayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/help_webview"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:scrollbars="none"
/>

In Ihrer Aktivität:

WebView webView;
setContentView(R.layout.webviewlayout);
webView = (WebView)findViewById(R.id.help_webview);
webView.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("http://www.google.com");

Aktualisieren

Hinzufügen webView.setWebViewClient(new WebViewController()); Ihrer Aktivität hinzu.

WebViewController-Klasse:

public class WebViewController extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
Farhana Haque
quelle
1
Es tut uns leid. Anscheinend habe ich etwas im Manifest geändert und jetzt funktioniert es auch. Trotzdem wird die Seite im Webbrowser geladen, nicht in der Webansicht.
Gilbou
Diese Zeile funktionierte für mich: webView.getSettings (). setJavaScriptEnabled (true);
pixparker
1
mWebview.getSettings (). setJavaScriptEnabled (true); hat für mich gearbeitet, wir müssen diese Zeile hinzufügen
neena
Dies ist eine schlechte Art, es zu tun. shouldOverrideUrlLoadingwird für alle in die Webansicht geladenen Seiten aufgerufen. Dies schließt iFrames ein. Wenn die Seite einen iFrame lädt, wird die Seite durch den iFrame ersetzt. Auf der entsprechenden Seite mit Android-Dokumenten wird davon abgeraten.
Hack5
19
public class WebViewController extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
webView.setWebViewClient(new WebViewController());
Rahul
quelle
1
Ich setze einen benutzerdefinierten webViewClient auf meine Webansicht. In meinem benutzerdefinierten WebViewClient habe ich die Methode shouldOverrideUrlLoading überladen, um meine URL zu laden. Ich übergebe meine URL mit diesem loc: webview.loadUrl ("URL");
Rahul
Dies ist eine schlechte Art, es zu tun. shouldOverrideUrlLoadingwird für alle in die Webansicht geladenen Seiten aufgerufen. Dies schließt iFrames ein. Wenn die Seite einen iFrame lädt, wird die Seite durch den iFrame ersetzt. Auf der entsprechenden Seite mit Android-Dokumenten wird davon abgeraten.
Hack5
13

Bitte verwenden Sie diesen Code: -

Main.Xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@drawable/background">
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:background="@drawable/top_heading"
        android:id="@+id/rlayout1">
        <TextView android:layout_width="wrap_content"
            android:layout_centerVertical="true" android:layout_centerHorizontal="true"
            android:textColor="#ffffff" android:textSize="22dip"
            android:textStyle="bold" android:layout_height="wrap_content"
            android:text="More Information" android:id="@+id/txtviewfbdisplaytitle" />
    </RelativeLayout>
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:layout_below="@+id/rlayout1"
        android:id="@+id/rlayout2">
        <WebView android:id="@+id/webview1" android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0" />
    </RelativeLayout>
</RelativeLayout>

MainActivity.Java

public class MainActivity extends Activity {
    private class MyWebViewClient extends WebViewClient {
          @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
              view.loadUrl(url);
              return true;
          }
    }
    Button btnBack;
    WebView webview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webview=(WebView)findViewById(R.id.webview1);
        webview.setWebViewClient(new MyWebViewClient());
        openURL();
    }

     /** Opens the URL in a browser */
    private void openURL() {
        webview.loadUrl("http://www.google.com");
        webview.requestFocus();
    }
}

Versuchen Sie diesen Code, wenn Sie Fragen haben.

Dipak Keshariya
quelle
1
Es klappt. Aber du hast 2 Dinge verpasst. Erstens haben Sie nicht gezeigt, dass eine Internetberechtigung erforderlich ist. Zweitens: Verwendung eines Hintergrundbilds. danke
Sumon Bappi
7

Es ist sehr einfach, diese Codezeilen zunächst in die Android Manifest- Datei zu integrieren

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

Schreiben Sie dann einen Code in Ihre Activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.MainActivity">

<WebView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/help_webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

/>

</LinearLayout>

Dann schreiben Sie diesen Code in Ihre MainActivity.java

import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends Activity{
    private WebView mWebview ;
    String link = "";// global variable
    Resources res;// global variable
    @Override


      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_modernherbal_main);
            mWebview  = (WebView) findViewById(R.id.help_webview);
            WebSettings webSettings = mWebview.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setUseWideViewPort(true);
            webSettings.setLoadWithOverviewMode(true);



        final Activity activity = this;

        mWebview.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
            }


});

    mWebview .loadUrl("http://www.example.com");

}

}}

Versuchen Sie dies, es wird Ihnen helfen, Ihr Problem zu lösen

Pronab Roy
quelle
4

Gehen Sie einfach in die XML-Datei und geben Sie Ihrem WebView eine ID. Fügen Sie dann in Java die folgende Zeile ein:

   public class Main extends Activity {

private WebView mWebview;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.Your_layout_file_name);

    mWebview = (WebView)findViewById(R.id.id_you_gave _to_your_wenview_in_xml);
    mWebview.loadUrl("http://www.google.com");
    }   
}
Ankush Rawat
quelle
1

Sie können dies tun.

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("Your URL goes here");
KarthikKPN
quelle
1

Versuche dies;

webView.loadData("<iframe src='http://www.google.com' style='border: 0; width: 100%; height: 100%'></iframe>", "text/html; charset=utf-8", "UTF-8");
alicanozkara
quelle
1

Fügen Sie die Internetberechtigung in AndroidManifest.xml hinzu

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

In Ihrem Layout:

<?xml version="1.0" encoding="utf-8"?>
<WebView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/webView"
 />

In Ihrer Aktivität

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
        progressDialog = new ProgressDialog(this);
        url_Api = "https://docs.microsoft.com/en-us/learn";

        webView = this.findViewById(R.id.webView);

            progressDialog.setMessage(getString(R.string.connection_Wait));
            progressDialog.setIndeterminate(false);
            progressDialog.setCancelable(true);
            progressDialog.show();

            LoadUrlWebView( url_Api );
    }catch (Exception e){
        Log.w(TAG, "onCreate", e);
    }
}

private void LoadUrlWebView( String url_api ) {
    try {
        webView.setWebViewClient(new WebViewClient());
        webView.setWebChromeClient(new MyWebChromeClient( url_api ));
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setAllowContentAccess(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);

        webView.loadUrl(url_api);
    } catch (Exception e) {
        Log.w(TAG, "setUpNavigationView", e);
    }
}

private class MyWebChromeClient extends WebChromeClient {
    private String urlAccount;

    public MyWebChromeClient( String urlAccount ) {
        this.urlAccount = urlAccount;
    }

    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        try {
            //Tools.LogCat(context, "INSIDE MyWebChromeClient | onProgressChanged / newProgress1:" + newProgress);
            progressDialog.setMessage(newProgress + "% " + getString(R.string.connection_Wait));
            if (newProgress < 100 && !progressDialog.isShowing()) {
                if (progressDialog != null)
                    progressDialog.show();
            }
            if (newProgress == 100) {
                if (progressDialog != null)
                    progressDialog.dismiss();
            }
        }catch (Exception e){
            Log.w( "onProgressChanged", e);
        }
    }

    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);

        sharedPreferences = new Shared_Preferences( context );
        sharedPreferences.setPageWebView(view.getUrl());
    }

}
Grafritz Design
quelle
1
Bitte verwenden Sie Englisch, da dies nur auf Englisch ist. In diesem Fall müssen nur 3 Zeilen übersetzt werden.
Scratte
1

Ich habe diesen Code verwendet, der cool war. habe aber einen fehler. "neterr_cleartext_not_permitted" zeigt, wenn Sie diesen Code verwenden, werden Sie auf dieses Problem stoßen .

Ich habe eine Lösung dafür. Sie müssen diese in Ihrer AndroidManifest.xml in der Nähe von über Anwendung hinzufügen

android:usesCleartextTraffic="true"
<uses-permission android:name="android.permission.INTERNET" /> // ignore if you already added. outside of Application.
Pankaj Kumar
quelle
1

Fügen Sie den WebView-Client hinzu

mWebView.setWebViewClient(new WebViewClient());
luea099
quelle
0

Sie müssen den WebView-Client hinzufügen

mWebView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        // do your stuff here
    }
});

Sie können auch onPageFinished verwenden, um Aufgaben auszuführen, nachdem die Webansicht das Laden der Webseite abgeschlossen hat

Mirza Ahmed Baig
quelle
-1

Fügen Sie die folgende Methode in Ihre Aktivitätsklasse ein. Hier ist der Browser nichts anderes als Ihr Webview-Objekt.

Jetzt können Sie das Web leicht seitenweise anzeigen.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && browser.canGoBack()) {
        browser.goBack();
        return true;
    }
    return false;
}
G. Anil Guptha
quelle
Dies fügt der Schaltfläche "Zurück" am unteren Rand des Android-Telefons eine Funktion hinzu: Sie fungiert als Browser-Schaltfläche "Zurück".
Don Larynx