18

Ich muss eine HTML-Webseite in internen oder externen Speicher von Android-Gerät laden und abrufen. Was ich brauche, ist eine Webseite in Android mit Web-View herunterladen und abrufen.Wie Sie eine Webseite im Online- und Offline-Modus in Android-Anwendung laden oder abrufen?

Es gibt viele wiederholte Fragen ähnlich dem Herunterladen oder Speichern der Webseite. Aber keine der Antworten hat mir geholfen. Führe mich!

Vielen Dank im Voraus.

+0

Haben Sie diese Einstellung viewer.getSettings versucht() setCacheMode (WebSettings.LOAD_DEFAULT) zur Webansicht? – sha

Antwort

6

Ich weiß nicht, ist diese Lösung geeignet für your.if Sie wollen eine Webseite im Offline-mod und Online-mod anzuzeigen können Sie einen Web-Crawler verwenden, um alle Daten zu holen von der Website. Here ist ein Beispielprojekt für android web crawler.nach dem Sie eine Website von URL oder lokalen Speicher basierend auf Ihrer Internetverfügbarkeit laden können.

0

Ein WebView kann laden und rendern remote und local html-Seiten plus es unterstützt auch 'data' scheme URL.

Storage Options

Gemeinsam genutzte Einstellungen (nicht sinnvoll, in Ihrem Fall)

Shop Private primitive Daten in Schlüssel-Wert-Paaren.

Interner Speicher (empfohlen für Ihren Fall)

Shop private Daten auf dem Gerätespeicher.

Externe Speicher (Sie können Verwendung in Ihnen Fall aber nicht empfohlen)

Shop öffentliche Daten auf dem gemeinsam genutzten externen Speicher.

SQLite Datenbanken (Sie können Verwendung in Ihnen Fall aber nicht empfohlen)

Shop strukturierte Daten in einer privaten Datenbank.

Network Connection (Sie können Verwendung in Ihnen Fall aber wird im Offline-Modus nicht funktionieren)

Speichern von Daten, die im Internet mit Ihrem eigenen Netzwerk-Server.

0

Sie vielleicht ausprobieren möchten shouldInterceptRequest Methode von WebViewClient zu verwenden, die auf Ihre WebView Satz verwenden. Es ermöglicht Ihnen, alle Ressourcen zu kennen, die während des Ladens geladen werden.So können Sie etwas tun:

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

speichern Sie die Webseite im Cache-Speicher;

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 

prüfen Link WebView load website when online, load local file when offline

0

Das klingt wie eine einfache Webview-Caching-Mechanismus für mich.

versuchen, diese

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

Verfahren isNetworkAvailable() prüft, ob eine aktive Netzwerkverbindung:

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

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

Schließlich, vergessen Sie nicht die folgenden drei Berechtigungen AndroidManifest.xml hinzuzufügen:.

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