AndroidWebViewがWebページの例外処理を読み込めませんでした



Android Webview Failed Load Webpage Exception Handling



開発プロセス中にWebViewの読み込みに失敗すると、404、500、Webページが見つからないなどのエラーが表示されます。このページには、システムのデフォルトのエラーインターフェイスが表示されます。システムのデフォルトのインターフェースは醜く、安全でないWebアドレスも公開します。したがって、WebViewのロードの失敗またはエラーに対処し、失敗したインターフェイスをロードするように統一されたスタイルをカスタマイズする必要があります。



ページ読み込み失敗グラフ

解決



ビューをカスタマイズしてロード失敗インターフェイスを表示したり、エラー表示Htmlを記述してWebViewをロードしたりすることができます。ここでは、最初にWebViewClient of onReceivedError() with WebChromeClient of onReceivedTitle()メソッドを書き直す必要があります。

  • Android6.0の次の処理方法:

①HTMLページのタイトルに「エラー」や「ウェブページが見つかりません」などの情報が含まれているかどうかを確認します

@Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title) // Get judgment by title below android 6.0 if (Build.VERSION.SDK_INT

②書き換えWebChromeClient of onReceivedTitle()メソッド処理(メソッドは廃止されました)



@Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl) //Executed below 6.0 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return } view.loadUrl('about:blank')// Avoid the default error interface view.loadUrl(mErrorUrl)// Load a custom error page }
  • Android 6.0以降の処理方法:

①書き換えWebViewClient of onReceivedHttpError()メソッド、対処するエラーコードを判断する

@Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { super.onReceivedHttpError(view, request, errorResponse) // This method only appeared in android 6.0 int statusCode = errorResponse.getStatusCode() if (404 == statusCode || 500 == statusCode) { view.loadUrl('about:blank')// Avoid the default error interface view.loadUrl(mErrorUrl)// Load a custom error page } }

②書き換えWebViewClient of onReceivedError()メソッド処理

@TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) { super.onReceivedError(webView, webResourceRequest, webResourceError) if (webResourceRequest.isForMainFrame()) {//Is it created for the main frame view.loadUrl('about:blank')// Avoid the default error interface view.loadUrl(mErrorUrl)// Load a custom error page } }

インターフェイスを送信すると、次のエラーメッセージが表示されます。
画像
パスが間違っていることが判明しました。2つのhttp、1つに変更するだけです。