android - WebView 加载过时的本地镜像。如何更新?

标签 android caching webview

我有一个 WebView,它只显示来自外部 SD 卡的图像。这很好用,但是如果图像被新数据覆盖,WebView 不会更新图像。

这更奇怪,因为 WebView 是在 Activity 的 onCreate 方法中全新创建的。这是我的代码:

@Override
public void onCreate(Bundle savedInstanceState)
{
    Log.d(TAG, "Creating Viewer");
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    Bundle extras = intent.getExtras();

    String imagePath = extras.getString("imgFile");

    shareImage(Uri.fromFile(new File(imagePath)));

    setContentView(R.layout.viewer_test);

    WebView viewer = (WebView) findViewById(R.id.imageViewer);
    viewer.getSettings().setAllowFileAccess(true);
    viewer.getSettings().setBuiltInZoomControls(false);
    viewer.getSettings().setLoadWithOverviewMode(true);
    viewer.getSettings().setUseWideViewPort(true);
    viewer.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    String filename = "file://"+ imagePath;
    String html = "<html><head></head><body bgcolor=\"#000000\"><center><img src=\""+ filename + "\"></center></body></html>";
    viewer.loadDataWithBaseURL(null, html, "text/html","utf-8", null);
    viewer.reload();
}

imagePath 中保存的路径中的图像在路径发送到此 Activity 之前被另一个 Activity 覆盖。然而,WebView 仍然显示旧图像数据。

如您所见,我已经尝试设置缓存模式并尝试手动重新加载 WebView,不幸的是没有成功。

我还用文件管理器检查过,SD 卡上的图像被新数据覆盖了。我试图多次覆盖该文件,但这也不起作用。图像数据以某种方式缓存在某处或某处。我怎样才能避免这种情况并每次都加载新数据?

(显然创建一个具有不同文件名的新文件工作正常,但我想替换旧文件。)

最佳答案

我对 Webview 不是很熟悉。但在普通网站中,您可以使用查询字符串来模拟唯一地址,同时仍然加载相同的图像。这通常用于网页上的 css 文件。

例子:http://www.webpage.com/image.jpg?cachekey=23456456754 通过在每次加载图像时随机化缓存键,它被视为唯一图像并且不会从缓存中加载。

在文件名字符串的末尾放置一个随机整数或字符串

Random r = new Random();
int randInt = r.nextInt(8000000-1000000) + 1000000;
String query = "?cachekey=" + randInt ;
String html = "<html><head></head><body bgcolor=\"#000000\"><center><img src=\""+ filename + query "\"></center></body></html>";

我还没有测试过这个。但这是一个如何解决它的想法。

关于android - WebView 加载过时的本地镜像。如何更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581645/

相关文章:

android - 覆盖库使用的 maxSdkVersion

ruby-on-rails - 在 Rails 中缓存 JSON 结果

android - 如何停止在 webView 中加载的网站上播放音频?

JavaFX Web View : how to block resources from a specific website?

javascript - 在android webview中使用angularjs时如何禁用网络安全?

Android 设置 - 反向依赖

android - Firebase 性能监控 React Native 集成

Java(安卓): calling a function from Context without cast

php - Laravel 缓存大量查询

c# - 为什么 Entity Framework 6.x 不缓存结果?