Androidプロジェクト実戦(五十六):WebViewにロードされたurlのリクエストエラーコードを取得する

3487 ワード

例えば、私はWebViewにurlをロードしています.このurlに対応するページ自体はドロップダウン・リフレッシュを持っていますが、ページ自体には400,500などの異常な要求エラーコードが表示されます.
このときページのロードに失敗し、ページ自体のドロップダウンは使用できません.ページの再ロードを要求する場合は、webviewの外側にandroidドロップダウンコントロール(SwipeRefreshLayout)をセットする必要があります.
これにより、必ず使用するSwipeRefreshLayoutのドロップダウンが発生します.
最終的には、ページのロードに成功した場合は、ページ自体のドロップダウンを使用し、ページのロードに失敗した場合はandroidドロップダウンコントロールのドロップダウンを使用する必要があります.
--------------------------------------------------------------------------------------------------------------------------------------------
解決策は、ロードされたurlのリクエストのエラーコードをリスニングすることです.SwipeRefreshLayout.setEnabled()は、ドロップダウン・リフレッシュを許可するかどうかを制御します.
 
リスニング対応6.0+6.0以下は、それぞれ2つの実装方法です.
一、Android 6.0+判定要求コード
        mWebView.setWebViewClient(new WebViewClient() {
            // .....
            
            @Override
            public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
                super.onReceivedHttpError(view, request, errorResponse);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (errorResponse.getStatusCode() == 500 ){
                        refresh.setEnabled(true); //     
                    }
                    LogUtils.i(TAG, "onReceivedHttpError:"+ errorResponse.getStatusCode());
                }
            }

        
        });

 
二、Android 6.0以下の判断要求コード
        mWebView.setWebChromeClient(new WebChromeClient() {
            // .....

            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                    if (title.contains("500")) {
                        refresh.setEnabled(true);
                    }
                }
            }
        });