Comment charger une page Web externe dans WebView

120

Mon problème est que la page Web n'est pas chargée dans la vue Web.

mWebview.loadUrl("http://www.google.com"); lance le navigateur Web ...

Voici le code de mon activité:

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

J'ai ajouté l'autorisation requise dans le manifeste:

<uses-permission android:name="android.permission.INTERNET" />
Gilbou
la source
Bonjour Gilbou votre code fonctionne en 2.2
Dipak Keshariya
Mais pas avec moi: (Ni sur HTC Wildfire, ni sur l'émulateur ... je ne comprends tout simplement pas.
Gilbou
1
Ok ... maintenant ça marche. Mais il lance le navigateur Web au lieu d'afficher la page dans la vue Web.
Gilbou le
Bonjour, cela signifie que si UR exécutez ce code, le navigateur est ouvert.
Dipak Keshariya
Vous avez vraiment besoin de cet exemple de
Athira Reddy

Réponses:

224

Grâce à ce post , j'ai enfin trouvé la solution. Voici le 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
la source
Bonne chose, mais je veux afficher le contenu Web de la page Wise.it est possible en utilisant la vue Web?
Zala Janaksinh
16
N'oubliez pas d'ajouter Permission <uses-permission android: name = "android.permission.INTERNET" />
star18bit
2
En fait, pour gérer l'url dans votre vue Web, vous devez définir un client de la vue Web.Si vous ne définissez pas de client, le comportement par défaut est de lancer une application qui gère les URL. Voir ce lien
erdemlal
2
L'activation du script java ouvre votre application à des problèmes de sécurité potentiels et je suis sûr qu'android sdk vous met en garde lorsque vous l'utilisez dans le code. Ne faites pas cela à moins que vous ne puissiez contrôler les sites Web que vous affichez dans votre vue Web et que l'activation du script java ne devrait pas être considérée comme une solution facile.
LostPuppy
1
Ne pas ouvrir ce code. AffichageWebpage not available
Ranjith Kumar
44

essaye ça

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

Dans votre activité:

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

Mettre à jour

Ajouter webView.setWebViewClient(new WebViewController()); à votre activité.

Classe WebViewController:

public class WebViewController extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
Farhana Haque
la source
1
Désolé. semble avoir changé quelque chose dans le manifeste et maintenant cela fonctionne aussi. mais quand même, la page est chargée dans le navigateur Web, pas dans la vue Web.
Gilbou le
cette ligne a fonctionné pour moi: webView.getSettings (). setJavaScriptEnabled (true);
pixparker le
1
mWebview.getSettings (). setJavaScriptEnabled (true); travaillé pour moi, nous devons ajouter cette ligne
neena
C'est une mauvaise façon de procéder. shouldOverrideUrlLoadingest appelé pour toutes les pages chargées dans la vue Web. Cela inclut les iFrames, ce qui signifie que si la page charge un iFrame, la page sera remplacée par l'iFrame. Ceci est déconseillé sur la page de documentation Android correspondante.
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
la source
1
Je configure un webViewClient personnalisé sur ma vue Web. Dans mon WebViewClient personnalisé, j'ai surchargé la méthode shouldOverrideUrlLoading pour charger mon url. Je passe mon URL avec ce loc: webview.loadUrl ("URL");
Rahul
C'est une mauvaise façon de procéder. shouldOverrideUrlLoadingest appelé pour toutes les pages chargées dans la vue Web. Cela inclut les iFrames, ce qui signifie que si la page charge un iFrame, la page sera remplacée par l'iFrame. Ceci est déconseillé sur la page de documentation Android correspondante.
Hack5
13

Veuillez utiliser ce 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();
    }
}

Essayez ce code si une requête me le demande.

Dipak Keshariya
la source
1
Ça marche. Mais vous avez manqué 2 choses. Premièrement, vous n'avez pas montré que l'autorisation Internet est nécessaire, Deuxièmement, l'utilisation de l'image de fond. merci
Sumon Bappi
7

Il est très simple d'essayer d'intégrer ces lignes de code d'abord prendre l'autorisation dans le fichier Android Manifest

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

puis écrivez du code dans votre 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>

Ensuite, écrivez ce code dans votre 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");

}

}

Essayez ceci, cela vous aidera à résoudre votre problème

Pronab Roy
la source
4

il suffit d'aller dans le fichier XML et de donner l'identifiant à votre webView puis en java collez ces lignes:

   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
la source
1

Vous pouvez faire comme ça.

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

essaye ça;

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

Ajouter une autorisation Internet dans AndroidManifest.xml

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

Dans votre mise en page:

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

Dans votre activité

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

}
Conception Grafritz
la source
1
Veuillez utiliser l'anglais, car il s'agit d'un site en anglais uniquement. Dans ce cas, il n'y a que 3 lignes à traduire.
Scratte le
1

J'ai utilisé ce code qui était cool. mais avoir une erreur. "neterr_cleartext_not_permitted" s'affiche lorsque vous utilisez ce code, vous serez confronté à ce problème.

J'ai une solution à ce problème.vous devez l'ajouter dans votre AndroidManifest.xml près de Application

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

Ajouter un client WebView

mWebView.setWebViewClient(new WebViewClient());
luea099
la source
0

Vous devez ajouter le client WebView

mWebView.setWebViewClient(new WebViewClient() {

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

vous pouvez également utiliser onPageFinished pour effectuer une tâche après le chargement de la page Web

Mirza Ahmed Baig
la source
-1

Ajoutez la méthode ci-dessous dans votre classe d'activité. Ici, le navigateur n'est rien d'autre que votre objet de vue Web.

Maintenant, vous pouvez afficher facilement le contenu de la page Web.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && browser.canGoBack()) {
        browser.goBack();
        return true;
    }
    return false;
}
G . Anil Guptha
la source
Cela ajoute une fonctionnalité au bouton «retour» en bas du téléphone Android: il fonctionne comme un bouton de navigateur «retour».
Don Larynx