Кэширование веб-страницы в автономном режиме просмотра веб-страниц приводит к появлению ERR_CACHE_MISS только на некоторых веб-сайтах. - PullRequest
0 голосов
/ 12 июня 2019

Кэш Android в веб-просмотре выбрасывает 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://stackoverflow.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://stackoverflow.com");
        }
        else
        {
            Log.i("err","CONNECTED");
            appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
            webView.getSettings().setAppCachePath(appCachePath);
            webView.loadUrl("https://stackoverflow.com");
        }
    } catch (Exception e) {
        Log.i("err","ERROR"+e.toString());
        e.printStackTrace();
    }

}

Я видел, что приложения Amazon, Flipkart, Instagram, Facebook для Android отлично кэшируются для просмотра в автономном режиме (пост, который мы покидаем, будет получен при повторном открытии нашего приложения в автономном режиме).

Я думаю, OkHTTPClient и Retrofit автономное кэширование используется для ответа json и не подходит для рендеринга веб-страницы в веб-представлении? Еще какой-нибудь способ кеширования сайта в webview?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...