aswww log

エンジニアの技術録。アプリとかウェブとか

WebView内で通信エラーでエラー画面表示さす

WebView内で通信エラーになった場合(net::ERR_CONNECTION_TIMED_OUT)、エラーページを表示さすようにハンドリング
#WebViewClient生成時に定義してあげる

○準備(既にassetsディレクトリがある場合は不要)
HTMLを置くassetsディレクトリを作成する。
AndroidStudioのプロジェクトのappを右クリック→[新規]→[New]→[Folder]→[Assets Folder]を選択。
app/src/main/asestsディレクトリが作成される。
また、build.gradleに以下のとおり追記する。(自動挿入されることもあるので、既にあったら編集不要)

android {
    sourceSets{
        main{
            assets.srcDirs=["src/main/assets"]
        }
    }
・
・
・

app/src/main/asestsにエラー画面のHTML(network_error.html)を配置して準備終了

○WebViewクラスにコーディング

次のとおりWebView生成時にオーバーラードして実装する。

WebView webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedError(WebView webview, int errorCode, String description, String failingUrl) {
        if(errorCode < 0){
            // 自作のエラーページを表示
            webView.loadUrl(“file:///android_asset/network_error.html”);
        }
    }

参考URL
http://www.hangout.co.jp/blog/archives/148
http://stackoverflow.com/questions/4997677/android-webview-onreceivederror
http://growsic.com/blog/androidlocalhtml/