2017-09-19 1 views
0

J'ai un problème avec mon système de cache pour android et ce que je veux est de mettre en cache ma dernière vue pour android et l'ouvrir en mode déconnecté mais en cas de besoin en ligne le live page ne le cache un si nous prenons un site Web du prix comme un exemple comme celui-ci http://www.oil-price.net/ et que mon code de classe javaCache la dernière vue d'une page pour le mode hors ligne

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(); 
    } 
} 

Répondre

0

vous pouvez utiliser ce code pour votre WebView mise en œuvre

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(); 
} 

et utiliser ce code dans votre manifeste

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

basé sur la réponse de WebView load website when online, load local file when offline

+0

ce code est mise en œuvre dans mon code, mais ne cache pas, il ouvre la page quand je suis en ligne, mais si hors ligne n'ouvre rien. et merci beaucoup pour votre réponse –

+0

mon code est en fragment pas d'activité y at-il un problème avec elle? –

+0

code de test à nouveau je l'ai changé. non, je ne pense pas que cela cause un problème @ AsemAbd-elnaser –