2012-05-31 87 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

相關問題