Una WebView rappresenta una View nella quale è possibile caricare pagine web (in locale o in remoto).

Il problema del secondo caso è che quanto ruotiamo il dispositivo la app va in crash.

La motivazione dovrebbe essere data dal fatto che ogni volta che ruotiamo lo schermo, la View si ricarica e fa una richiesta.

Una possibile soluzione è quella di bloccare la rotazione, ma in alcuni casi non è una buona soluzione.

Tempo fa abbiamo parlato delle Webview in Android; questo componente permette di visualizzare pagine web dentro le nostre app.

Basandosi su Webkit, le WebView hanno un ottimo supporto ad HTML 5.

L'unico svantaggio è che se il device è offline non è possibile visualizzare le pagine.

Possiamo però impostarle per tenere le pagine anche offline in cache.

Cosa finadamentale è che la pagine web non sia impostata per non permettere la cache con impostazioni di questo tipo:

Cache-control: no-store, no-cache
Pragma: no-cache

Una volta verificato ciò, passiamo alla app.

Prima di tutto verifichiamo che il device sia connesso:

public class CheckConn {

    public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = cm.getActiveNetworkInfo();
        if (ni == null) {
            return false;
        }
        return ni.isConnected();
    }

}

Ho già parlato anche di questo, quindi non mi soffermo a spiegare.

In questo articolo avevo spiegato come caricare un url in una WebView.

Tanto per rinfrescarci la memoria:

WebView wv = (WebView) findViewById(R.id.wv);

wv.getSettings().setJavaScriptEnabled(true);

wv.loadUrl("http://www.google.it");

Qui abilitiamo anche Javascirpt che a mio parere è fondamentale.

Sotto carichiamo un url.

Apriamo una nuova sezione dedicata al linguaggio nativo per i sistemi Apple: Objective-C.

Nello specifico vedremo come caricare una UIWbeView, componente che ci permette di visualizzare le pagine web su iPhone e iPad.

La guida si riferisce infatti ad entrambi i dispositivi.

Nel vostro progetto aggiungete un componente UIWebView e "collegatelo" a InterfaceBuilder.

Ad esempio questo è il mio FirstViewController.h:

#import <UIKit/UIKit.h>

@interface FirstViewController : UIViewController {
     IBOutlet UIWebView *wvCollection;
}

@property (nonatomic, retain) IBOutlet UIWebView *wv_collection;

@end

Adesso nell'implementazione andremo a usare due metodi:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [wvCollection loadRequest:[LoadUrl load:@"http://www.compagniaitaliana.it/beta/app/collection.php"]];
}

 

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [wvCollection loadRequest:[LoadUrl load:@"http://www.compagniaitaliana.it/beta/app/collection.php"]];
}

Il primo metodo viene caricato solo la prima volta che si accede al controller.

Se poi cambiamo view e ci ritorniamo vediamo che è rimasto come lo avevamo lasciato.

Se vogliamo che si ricarichi ogni volta dobbiamo implementare anche il secondo metodo.

Ed eccoci al primo articolo sulla parogrammazione Android.

Vi parlerò delle WebView, una particolare View che ci permette di visualizzare pagine web direttamente nella nostra App.

Prima di tutto modificate il file AndroidManifest.xml aggiungendo questa riga:

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

Poi nel vostro layout aggiungete una WebView:


<WebView
   android:id="@+id/myWebView"
   android:layout_width="match_parent"
   android:layout_height="match_parent" />

Ricordatevi di assegnarli un id in modo da poter accedere alla WV da codice.