Android 在线时从缓存加载webview

Android 在线时从缓存加载webview,android,caching,webview,Android,Caching,Webview,我的应用程序由一个mainactivity组成,它会导致第二个活动,其中有3个按钮中的1个按钮可选择,所有按钮都会导致不同的网络视图。WebView只加载包含照片和一些文本的简单HTML页面 我希望我的用户加载页面1次,然后缓存页面。 为此,我使用了web.setCacheMode(加载\u缓存\u其他\u网络)。 一切都很好,但问题是。 我使用操作栏中的刷新按钮。只需调用web.reload()或web.loadUrl(“MyURL”) 但是,当我使用上面的缓存模式时,刷新按钮不起作用,它只是

我的应用程序由一个mainactivity组成,它会导致第二个活动,其中有3个按钮中的1个按钮可选择,所有按钮都会导致不同的网络视图。WebView只加载包含照片和一些文本的简单HTML页面

我希望我的用户加载页面1次,然后缓存页面。 为此,我使用了
web.setCacheMode(加载\u缓存\u其他\u网络)
。 一切都很好,但问题是。 我使用操作栏中的刷新按钮。只需调用
web.reload()
web.loadUrl(“MyURL”)
但是,当我使用上面的缓存模式时,刷新按钮不起作用,它只是加载缓存的页面。因此,当我用新照片或文本更新HTML页面时,它不会被加载。但是当我使用
web.setcacheMode(加载默认值)
时,它不会被缓存,但刷新按钮可以工作。 我决定我需要有一个互联网连接的缓存工作。。。。威奇很奇怪

下面是我在webview中使用的代码

public class AGF_R1 extends ActionBarActivity {


    WebView web;

    private int getScale(){
        Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        int width = display.getWidth();
        Double val = new Double(width)/new Double(1200);
        val = val * 100d;
        return val.intValue();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater mif = getMenuInflater();
        mif.inflate(R.menu.menu_agf__r1, menu);
        return super.onCreateOptionsMenu(menu);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //regelt de onClick
        switch (item.getItemId()) {
            case R.id.herlaad:
                web.reload();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(com.KnapperDev.knapper.jrw.R.layout.activity_agf__r1);

        web = (WebView) findViewById(com.KnapperDev.knapper.jrw.R.id.AGF_WebView1);
        web.setInitialScale(getScale());
        web.getSettings().setJavaScriptEnabled(true);
        web.getSettings().setBuiltInZoomControls(true);
        web.getSettings().setLoadsImagesAutomatically(true);
        web.loadUrl("http://77.161.45.179/AGF/AGF_R1.html");
        web.getSettings().setAppCacheEnabled(true);
        web.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        web.setWebViewClient(new AGF_WebClient());

        Calendar cal = Calendar.getInstance();
        cal.setFirstDayOfWeek(Calendar.MONDAY);

        int week = cal.get(Calendar.WEEK_OF_YEAR);
        int w1 = week;
        int w2 = week + 1;
        int w3 = week + 2;
        String rst = "Rooster week: ";

        getSupportActionBar().setTitle(rst + w1);

    }

    public class AGF_WebClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()){
            web.goBack();
            return  true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

您可以尝试使用刷新按钮刷新缓存,而不是刷新网页

诚然,这是一个蛮力的解决方案


参考资料:

这是一个好主意,除了它会搜索整个缓存的部分,而且它没有提到任何关于只清除特定网络视图的内容。我想这是不可能的?