【问题标题】:how to webview offline and online load website content in android如何在android中离线和在线加载网站内容
【发布时间】:2015-06-21 05:21:45
【问题描述】:

我实际上是 Java 编程的新手,但我一直在关注我的问题的几种解决方案,但没有找到适合我情况的解决方案,而且我似乎无法正确获取代码。

我想要一个 WebView,它在手机在线时打开一个在线页面(例如 google),在手机离线时打开一个本地 html 页面。

同时,虽然我希望手机在在线时覆盖本地页面,以便离线本地页面始终更新到手机最后一次连接到互联网时。

任何想法如何做到这一点?一些简单的指向正确的方向可能会有所帮助。

非常感谢

我的源代码

        WebView engine=(WebView)findViewById(R.id.webView);
        engine.getSettings().setJavaScriptEnabled(true);
        engine.getSettings().setBuiltInZoomControls(true);
        engine.getSettings().setLoadsImagesAutomatically(true);
               engine.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        engine.setInitialScale(1);

        engine.setWebChromeClient(new WebChromeClient() {
              @Override
                 public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,QuotaUpdater quotaUpdater)
                 {
                       quotaUpdater.updateQuota(spaceNeeded * 2);
                 }
              public void onProgressChanged(WebView view, int progress)
              {
                  activity.setTitle("Loading...");
                  activity.setProgress(progress * 100);



                  if(progress == 100)
                  { activity.setTitle(R.string.app_name);

                  }
              }
           });
        engine.getSettings().setDomStorageEnabled(true);
       // Set cache size to 8 mb by default. should be more than enough
        engine.getSettings().setAppCacheMaxSize(1);
        engine.getSettings().setAllowFileAccess(true);
        engine.getSettings().setAppCacheEnabled(true);
        engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
        noCacheHeaders.put("Pragma", "no-cache");
        noCacheHeaders.put("Cache-Control", "no-cache");
      //  engine.loadUrl("http://www.stackhand.com", noCacheHeaders);

         cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE);
         if(cm.getActiveNetworkInfo().isConnected())
         {
         engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

         }
             else{
                engine.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

             }



         engine.loadUrl("http://www.stackhand.com", noCacheHeaders);

使用此功能检查网络在线和离线

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

【问题讨论】:

标签: android webview


【解决方案1】:

首先在 HTML 中创建您自己的页面,该页面要在离线时显示。并将其放在您的资产文件夹中,我们将其命名为 mypage.html 然后使用 onReceivedError: 添加以下代码,

mWebView.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
    mWebView.loadUrl("file:///android_asset/mypage.html");

}

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2016-02-28
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多