保存外部缓存文​​件

Posted

技术标签:

【中文标题】保存外部缓存文​​件【英文标题】:Saving External Cache Files 【发布时间】:2011-09-20 02:35:36 【问题描述】:

我正在尝试将缓存的 webView 文件保存到 SD 卡上的目录中。我在服务器上使用 html5 和缓存清单文件。我使用 setAppCachePath 方法为 sd 卡设置了一个外部目录,但缓存正在加载到应用程序默认的“data/data/myApp/cache/webiewCache”目录,而不是我使用 setAppCachePath 方法设置的目录。外部目录存在,但数据没有到达它。有什么想法或建议吗?以下是我正在实施的方法。

谢谢帮助。

public class DocumentView extends Activity 
/**
 * -- Called when the activity is first created.
 * ================================================
 **/
@Override
public void onCreate(final Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    String t = getIntent().getStringExtra("TITLE");
    activityTitle.setText(t);

    String l = getIntent().getStringExtra("LABEL");
    CreateCacheDirectory();

    String lbl = getIntent().getStringExtra("TITLE");
    pd = ProgressDialog.show(this, "" + lbl, "Retrieving data from server",
            true);

    // -- Set up the WebView ==========================================
    final String url = getIntent().getStringExtra("url");// get url that
                                                            // passed from
                                                            // previous
                                                            // Activity
    mWebView = (WebView) findViewById(R.id.webView1);
    mWebView.getSettings().setDomStorageEnabled(true);

    // Set cache size to 8 mb by default. should be more than enough
    mWebView.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);
    // The DEFAULT location for the cache
    mWebView.getSettings().setAppCachePath(
            extStorageDirectory + "/myCo/myApp/cache/" + l);
    // Cache settings
    mWebView.getSettings().setAllowFileAccess(true);
    mWebView.getSettings().setAppCacheEnabled(true);
    mWebView.getSettings()
            .setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    // Misc webView settings
    mWebView.getSettings().setjavascriptEnabled(true);

    // Check to see if there is a saved state
    if (savedInstanceState != null) 
        mWebView = (WebView) findViewById(R.id.webView1);
        mWebView.restoreState(savedInstanceState);
     else  // If not, load the new URL from the intent bundle
        mWebView = (WebView) findViewById(R.id.webView1);
        mWebView.loadUrl(url);
        // Show the progress to the user
        mWebView.setWebChromeClient(new WebChromeClient() 
            public void onProgressChanged(WebView view, int progress) 
                activity.setProgress(progress * 100);

                if (progress == 100)
                    pd.dismiss();
            

            @Override
            // Tell the client that the Application Cache has exceeded its
            // max size
            public void onReachedMaxAppCacheSize(long spaceNeeded,
                    long totalUsedQuota,
                    WebStorage.QuotaUpdater quotaUpdater) 
                quotaUpdater.updateQuota(spaceNeeded * 2);
            

        );
        // Set the WebViewClient that will receive various notifications and
        // requests
        mWebView.setWebViewClient(new WebViewClient() 
            @Override
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) 
                // The redirect
                if (url.equals(failingUrl)) 
                    // error.html is the place we are redirected to by the
                    // server if we are online
                    mWebView.loadUrl("http:www.myCo/error.html");
                    return;
                 else if (url.equals(failingUrl))  // The cache failed –
                                                        // We
                                                        // don't have an
                                                        // offline
                                                        // version to show
                    // This code removes the ugly android's
                    // "can't open page"
                    // and simply shows a dialog stating we have no network
                    view.loadData("", "text/html", "UTF-8");
                    // TODO -->showDialog(DIALOG_NONETWORK);
                
            

            // Set the WebViewClient that will receive various notifications
            // and requests
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) 
                view.loadUrl(url);
                return true;
            
        );
    
    slidingDrawer();// Load the slidingDrawer
    quickAction();// Load the QuickAction Bar interface
    tableOfContenants();// Load the TOC button interface

【问题讨论】:

我也有同样的问题。你解决了吗? 【参考方案1】:

我试图解决同样的问题,在 v11 及更高版本中,我通过使用 onLoadResource 将 url 保存在 SD 卡上,然后 shouldOverrideUrlLoading(WebView view, String url) 来加​​载资源(如果我们有资源)来解决这个问题本地。

a link! 一致。

任何解决方案

【讨论】:

链接现在不起作用。你能提供任何替代链接吗? 我想这可能是链接unusual.life/development/html5-cache-android-webview

以上是关于保存外部缓存文​​件的主要内容,如果未能解决你的问题,请参考以下文章

从base64检查文​​件类型?

C语言编程文本保存问题。。高分悬赏

在 C# 中使用 SaveFileDialog 保存为特定文件格式

将文件保存在设备存储上

如何将文件(IN C)中的每一行保存在变量中? :)

wemall app中基于Java获取和保存图片的代码