保存外部缓存文件
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) 来加载资源(如果我们有资源)来解决这个问题本地。
在
任何解决方案
【讨论】:
链接现在不起作用。你能提供任何替代链接吗? 我想这可能是链接unusual.life/development/html5-cache-android-webview以上是关于保存外部缓存文件的主要内容,如果未能解决你的问题,请参考以下文章