インターネット接続を切った状態でWebViewで適当なページヘアクセスすると、WebView#setWebViewClient()
でセットしたクラスの onPageStarted()
が二回呼ばれてしまいます。
stackoverflowによると、どうやらアクセスに失敗した時は以下の順でメソッドが呼ばれる模様。
onPageStarted()
onLoadResource()
onReceivedError()
onPageStarted()
onLoadResource()
onPageFinished()
onPageStarted()
の中で初期化処理をしているので、何度も呼ばせたくない!
のですが、こればかりは如何ともし難い。
onReceivedError()
は一度しか呼ばれないので、このタイミングでフラグを立てて初期化処理をスキップすることで、どうにか解決する事が出来ました。
大体こんな感じ。どこか再試行のタイミングでフラグを折ってやる必要がある。
HogeActivity.java
// (前略)
private boolean mErrored;
@Override
public void onCreate(Bundle savedInstanceState) {
// エラーのフラグ。これがtrueのときは初期化処理を行わない
this.mErrored = false;
// (中略)
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted (WebView view, String url, Bitmap favicon) {
if (!mErrored) {
// 初期化処理
}
}
@Override
public void onReceivedError (WebView view, int errorCode, String description, String failingUrl) {
mErrored = true;
}
});
}
// (後略)