2012-05-31 154 views
1

我想制作一个具有webview布局的android应用程序。这是我的应用程序的标准:将webview内容保存到android存储并加载它

  1. 第一次应用程序启动时,加载网页流量的网址(也许Facebook,谷歌等。) webview.loadUrl(“http://www.google。 COM“);

  2. 加载url后,应用程序将加载的url保存到android的内部存储“特定位置”的HTML View(file.htm)中。因此,假设我打开“google.com”,应用程序将google的网页保存为HTML文件(假设文件名为“google.htm”),并且当我进入该“特定位置”并单击“google .htm“文件,它显示了使用android的HTML查看器的谷歌网页。

  3. 当应用程序再次启动时,或者简单地说应用程序再次加载url(在本例中为“google.com”)时,它不会从“google.com”页面获取,但它需要从内部存储android上的“google.htm”文件。所以从用户的角度来看,该应用程序仍然可以加载网页,即使它没有连接到互联网。

为简单起见,

  1. 应用开始 - >转到指定的网址 - >检查存储
  2. ,如果有指定的URL已在存储的HTML文件,然后负载从存储
  3. 否则它加载网站的URL。

任何人都可以帮助我的代码和解释?对此,我真的非常感激。谢谢你们:D

+0

您是否尝试过某些东西?这样做时你遇到任何问题吗?你需要建筑建议吗?因为这个网站不是代码分配器。 –

+0

可否请你提供完整的源代码,我不能管理上面的代码工作.. 谢谢 –

回答

4

当页面加载完成时,您可以使用WebView的Javascript接口返回整个HTML源代码。为此,您需要将您自己的WebViewClient分配给WebView。

要做到这一点,使用类似于你的Activity类以下的东西 - 确保您的活动实现观察员

public void onCreate(Bundle savedInstanceState) { 
    // ... 

    webView.setWebViewClient(new MyWebViewClient()); 
    HtmlJSInterface htmlJSInterface = new HtmlJSInterface(); 
    webView.addJavascriptInterface(htmlJSInterface, "HTMLOUT"); 
    htmlJSInterface.addObserver(this); 

    // ... 
} 

// Called when our JavaScript Interface Observables are updated. 
@Override 
public void update(Observable observable, Object observation) { 

    // Got full page source. 
    if (observable instanceof HtmlJSInterface) { 
     html = (String) observation; 
     onHtmlChanged(); 
    } 
} 

private void onHtmlChanged() { 
    // Do stuff here... 
} 

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     // When each page is finished we're going to inject our custom 
     // JavaScript which allows us to 
     // communicate to the JS Interfaces. Responsible for sending full 
     // HTML over to the 
     // HtmlJSInterface... 
     isStarted = false; 
     isLoaded = true; 
     timeoutTimer.cancel(); 
     view.loadUrl("javascript:(function() { " 
       + "window.HTMLOUT.setHtml('<html>'+" 
       + "document.getElementsByTagName('html')[0].innerHTML+'</html>');})();"); 
     } 
    } 
} 

然后,你将要创建的HtmlJSInterface类,因此:

public class HtmlJSInterface extends Observable { 
    private String html; 

    /** 
    * @return The most recent HTML received by the interface 
    */ 
    public String getHtml() { 
    return this.html; 
    } 

    /** 
    * Sets most recent HTML and notifies observers. 
    * 
    * @param html 
    *   The full HTML of a page 
    */ 
    public void setHtml(String html) { 
    this.html = html; 
    setChanged(); 
    notifyObservers(html); 
    } 
} 
+0

顺便说一句,请忽略onPageFinished()中的额外变量和计时器。 :) –

+1

感谢您的答案。但是,这个html文件将被保存在内部存储中? – kyuu

+0

谢谢我现在得到它! – kyuu

相关问题