在 webview offline 中缓存网页仅在某些网站中抛出 ERR_CACHE_MISS
Caching the webpage in webview offline throws ERR_CACHE_MISS only in some websites
Android webview 中的缓存抛出 ERR_CACHE_MISS 对于 某些网站 (我的网站),即使在插入之后
的适当许可
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
在manifest.xml
但是对于 某些网站 (https://whosebug.com) 它不会抛出任何东西并且在我使用下面的代码时正常工作
WebView webView;
ConnectivityManager connectivityManager;
ProgressBar progressBar;
String appCachePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
progressBar = findViewById(R.id.progressBar);
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
progressBar.setProgress(100);
progressBar.setVisibility(View.VISIBLE);
if(progressBar.getProgress()==100){
progressBar.setVisibility(View.GONE);
}
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webView.getSettings().setAppCachePath(appCachePath);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
try {
connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Activity.CONNECTIVITY_SERVICE);
if(connectivityManager.getActiveNetworkInfo() == null || !connectivityManager.getActiveNetworkInfo().isConnected())
{
Log.i("err","CACHE OR NETWROK");
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
webView.loadUrl("https://whosebug.com");
}
else
{
Log.i("err","CONNECTED");
appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webView.getSettings().setAppCachePath(appCachePath);
webView.loadUrl("https://whosebug.com");
}
} catch (Exception e) {
Log.i("err","ERROR"+e.toString());
e.printStackTrace();
}
}
我已经看到亚马逊、Flipkart、Instagram、Facebook android 应用程序完美缓存以供离线查看(post 我们离开应用程序时将在离线时重新打开我们的应用程序时检索)。
我认为 OkHTTPClient 和 Retrofit 离线缓存用于 json 响应并且不适合在 webview 中呈现网页?还有其他在 webview 中缓存网站的方法吗?
您尝试加载的页面应该在 page.In 索引文件的顶部有基本 Html 和元标记。
Android webview 中的缓存抛出 ERR_CACHE_MISS 对于 某些网站 (我的网站),即使在插入之后
的适当许可<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
在manifest.xml
但是对于 某些网站 (https://whosebug.com) 它不会抛出任何东西并且在我使用下面的代码时正常工作
WebView webView;
ConnectivityManager connectivityManager;
ProgressBar progressBar;
String appCachePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
progressBar = findViewById(R.id.progressBar);
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
progressBar.setProgress(100);
progressBar.setVisibility(View.VISIBLE);
if(progressBar.getProgress()==100){
progressBar.setVisibility(View.GONE);
}
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webView.getSettings().setAppCachePath(appCachePath);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
try {
connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Activity.CONNECTIVITY_SERVICE);
if(connectivityManager.getActiveNetworkInfo() == null || !connectivityManager.getActiveNetworkInfo().isConnected())
{
Log.i("err","CACHE OR NETWROK");
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
webView.loadUrl("https://whosebug.com");
}
else
{
Log.i("err","CONNECTED");
appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webView.getSettings().setAppCachePath(appCachePath);
webView.loadUrl("https://whosebug.com");
}
} catch (Exception e) {
Log.i("err","ERROR"+e.toString());
e.printStackTrace();
}
}
我已经看到亚马逊、Flipkart、Instagram、Facebook android 应用程序完美缓存以供离线查看(post 我们离开应用程序时将在离线时重新打开我们的应用程序时检索)。
我认为 OkHTTPClient 和 Retrofit 离线缓存用于 json 响应并且不适合在 webview 中呈现网页?还有其他在 webview 中缓存网站的方法吗?
您尝试加载的页面应该在 page.In 索引文件的顶部有基本 Html 和元标记。