【问题标题】:Cache the last view of a page for offline mode缓存页面的最后一个视图以用于离线模式
【发布时间】:2017-09-19 08:23:37
【问题描述】:

我的安卓缓存系统有问题 我想要的是为android缓存我的最后一个视图并在离线模式下打开它但是在在线的情况下想要实时页面而不是缓存的页面 如果我们以任何价格网站为例 http://www.oil-price.net/ 这是我的java类代码

public class Petroleum_price extends Fragment {


    public Petroleum_price() {
        // Required empty public constructor
    }

    Context context;
    WebView mwebView;


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.activity_petroleum_price, container, false);
        context = container.getContext();
        mwebView = new WebView(context);
        mwebView = (WebView) v.findViewById(R.id.webView);
        WebSettings webSettings = mwebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        mwebView.getSettings().setAppCachePath( getActivity().getApplicationContext().getCacheDir().getAbsolutePath() );
        mwebView.getSettings().setAppCacheEnabled(true);
        mwebView.getSettings().setAllowFileAccess( true );
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSettings.setUseWideViewPort(true);
        webSettings.setSaveFormData(true);
        CookieManager.getInstance().setAcceptCookie(true);
        if ( !isNetworkAvailable() ) { // loading offline
            mwebView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
        }

        mwebView.loadUrl( "http://www.oil-price.net/" );
        return v;
    }

    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}

【问题讨论】:

    标签: android android-fragments caching offline-caching


    【解决方案1】:

    您可以将此代码用于您的 WebView 实现

    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setAppCacheMaxSize( 10 * 1024 * 1024 );
    webView.getSettings().setAppCachePath( getCacheDir().getAbsolutePath() );
    webView.getSettings().setAllowFileAccess( true );
    webView.getSettings().setAppCacheEnabled( true );
    webView.getSettings().setJavaScriptEnabled( true );
    webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT );
    if ( !isNetworkAvailable() ) {
        webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
    }
    webView.loadUrl( "http://www.google.com" );
    
    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
    

    并在您的清单中使用此代码

    <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"/>
    

    基于WebView load website when online, load local file when offline的回答

    【讨论】:

    • 这些代码在我的代码中实现但不缓存,它在我在线时打开页面但如果离线不打开任何东西。非常感谢您的回复
    • 我的代码在片段中没有活动它有问题吗?
    • 再次测试代码我改变了它。不,我认为这不会导致问题@AsemAbd-elnaser
    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多