Android webview處理404、500、斷網、timeout頁面的問題

Google雖然在Android6.0解決了這個問題,但是Android6.0以下的手機市場佔有率還是很多的,所以我們就要自己手動去解決這個問題。

處理404、500

在Android6.0以下我們是不能直接獲取到404或者500的,Android6.0谷歌解決了這個問題。那麼在Android6.0以下的系統我們如何處理404這樣的問題呢?

兩種解決方案:

方案一(推薦)通過獲取網頁的title,判斷是否爲系統默認的404頁面

我們可以在WebChromeClient()子類中可以重寫他的onReceivedTitle()方法

Android6.0以下判斷404或者500:

    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        // android 6.0 以下通過title獲取
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            if (title.contains("404") || title.contains("500") || title.contains("Error")) {
                view.loadUrl("about:blank");// 避免出現默認的錯誤界面
                view.loadUrl(mErrorUrl);
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Android6.0以上判斷404或者500:

    @TargetApi(android.os.Build.VERSION_CODES.M)
    @Override
    public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
        super.onReceivedHttpError(view, request, errorResponse);
        // 這個方法在6.0纔出現
        int statusCode = errorResponse.getStatusCode();
        System.out.println("onReceivedHttpError code = " + statusCode);
        if (404 == statusCode || 500 == statusCode) {
            view.loadUrl("about:blank");// 避免出現默認的錯誤界面
            view.loadUrl(mErrorUrl);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

判斷斷網和鏈接超時

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
        // 斷網或者網絡連接超時
        if (errorCode == ERROR_HOST_LOOKUP || errorCode == ERROR_CONNECT || errorCode == ERROR_TIMEOUT) {
            view.loadUrl("about:blank"); // 避免出現默認的錯誤界面
            view.loadUrl(mErrorUrl);
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章