18

Ho bisogno di caricare e recuperare una pagina Web HTML nella memoria interna o esterna del dispositivo Android. Quello di cui ho bisogno è scaricare e recuperare una pagina web in Android usando la visualizzazione web.come caricare o recuperare una pagina web sia in modalità online che offline nell'applicazione Android?

Ci sono molte domande ripetute simili al download o al salvataggio della pagina web. Ma nessuna delle risposte mi ha aiutato. Guidami!

Grazie in anticipo.

+0

Hai provato questo impostazione viewer.getSettings() setCacheMode (WebSettings.LOAD_DEFAULT) per WebView? – sha

risposta

6

Non so è questa soluzione adatta per your.if si desidera visualizzare un sito web in linea mod mod e on-line è possibile utilizzare un web crawler per recuperare tutti i dati dal sito web. Here è un progetto di esempio per Android Web Crawler. Dopo che è possibile caricare un sito Web dall'URL o dalla memoria locale in base alla disponibilità di Internet.

0

Un WebView può caricare e rendere remote e local pagine html più esso anche sostenere 'data' scheme URL.

Storage Options

Preferenze condivise (non utile nel tuo caso)

Memorizzare i dati primitivi privati ​​in coppie chiave-valore.

Storage interno (consigliato per il vostro caso)

Memorizzare i dati privati ​​della memoria del dispositivo.

External Storagepossibile uso in voi caso, ma non raccomandato)

Memorizzare i dati pubblici sulla memorizzazione esterno condiviso.

SQLite databasepossibile uso in voi caso, ma non raccomandato)

Conservare dati strutturati in un database privato.

connessione di retepossibile uso in voi caso, ma non funzionerà in modalità offline)

Memorizzare i dati sul web con il proprio server di rete.

0

Si potrebbe desiderare di provare a utilizzare shouldInterceptRequest metodo WebViewClient che usate il set al vostro WebView. Ti permette di conoscere tutte le risorse che vengono caricate durante la procedura di caricamento HTML.Così si può fare qualcosa di simile:

WebViewClient webViewClient = new WebViewClient() { 
    @TargetApi(VERSION_CODES.LOLLIPOP) 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
     WebResourceResponse response = null; 
     if ("GET".equals(request.getMethod())) { 
      try { 
       response = getWebResponse(view.getContext().getApplicationContext(), request.getUrl().toString()); 
      } catch (Exception e) { 
       Log.e(TAG, "Error while overriding getting web response", e); 
      } 
     } 
     return response; 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 
     WebResourceResponse response = null; 
     try { 
      response = getWebResponse(view.getContext().getApplicationContext(), url); 
     } catch (Exception e) { 
      Log.e(TAG, "Error while overriding getting web response", e); 
     } 
     return response; 
    } 

    WebResourceResponse getWebResponse(Context context, String url) { 
     // YOUR IMPLEMENTATION that will save resource located at passed url 
    } 
} 
webView.setWebViewClient(webViewClient); 
-1

salvare la pagina Web nella memoria cache;

WebView webView = new WebView(context); 
webView.getSettings().setAppCacheMaxSize(5 * 1024 * 1024); // 5MB 
webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); 
webView.getSettings().setAllowFileAccess(true); 
webView.getSettings().setAppCacheEnabled(true); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // load online by default 

controllare questo link WebView load website when online, load local file when offline

0

Mi sembra un semplice meccanismo di memorizzazione nella cache di Webview.

provare questo

WebView webView = new WebView(context); 
webView.getSettings().setAppCacheMaxSize(5 * 1024 * 1024); // 5MB 
webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); 
webView.getSettings().setAllowFileAccess(true); 
webView.getSettings().setAppCacheEnabled(true); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // load online by default 

if (!isNetworkAvailable()) { // loading offline 
    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
} 

Il metodo isNetworkAvailable() controlla per una connessione di rete:

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

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

Infine, non dimenticare di aggiungere le seguenti tre autorizzazioni alla AndroidManifest.xml:.

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
Problemi correlati