webviewでのエラー処理について

4,547 views
Skip to first unread message

70

unread,
Jun 6, 2011, 2:48:05 AM6/6/11
to 日本Androidの会
はじめて、投稿させて頂きます。

現在、webkitのwebviewを使用して、ブラウザを作成しています。

サーバが無い場合や回線が切断されている等のエラーが発生した場合、
『ページが見つかれませんでした。』と表示されます。

この画面を表示しない方法(『ページが見つかれませんでした。』
に遷移しないで画面を保持する方法)が分かりません。

WebViewClientのonReceivedErrorで、エラーのイベントが拾える事は
分かったのですが、どの様な処理を記述すれば、
『ページが見つかれませんでした。』と表示されないで、
画面が保持出来るのかが分かりません。

ご存知な方がいましたら、ご教授をお願いします。

以上

yoshiyuki kanno

unread,
Jun 7, 2011, 5:37:45 AM6/7/11
to android-g...@googlegroups.com
菅野です。

以前、同じような事を考えていまして、その時は放置したのですが、
改めて気になったのでソースなどを確認してみましたが、
結論からいうとWebViewでは不可能と思われます。

一瞬表示されても良いのであれば、UIスレッドのHandlerをこさえておいて
onReceivedError内で、

            view.setVisibility(View.INVISIBLE);
            hander.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (mWebView.canGoBack()) {
                        mWebView.goBack();
                    }
                    mWebView.setVisibility(View.VISIBLE);
                }
            },  500);

のように次のUIスレッド実行時に、前の画面を生成する処理(goBack)を実行すると
一瞬「ページがみつかりませんでした」画面が表示されますが、直後に元の画面に戻るという動きは実現できます。

これを消去するには、エラー発生時にWebViewが内部的に発行しているエラー画面描画処理メッセージを
Looper.myQueue()から削除する必要があり、残念ながらこれはアプリレイヤからは見えないので駄目そう、、、という感じです。

2011年6月6日15:48 70 <oht...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


70

unread,
Jun 8, 2011, 3:22:08 AM6/8/11
to 日本Androidの会
菅野様、はじめまして。

回答して頂き、有難うございます。

やはり、表示しない様にするのは無理ですか。

提案して頂いた方法、参考になりました。
現状はこの方法がベストと考え、この仕様で作りと思います。

有難うございました。

以上

pitper

unread,
Jun 8, 2011, 4:21:38 AM6/8/11
to 日本Androidの会
こんにちは、pitperです。

お望みの動作になるかは分かりませんが、
onReceivedErrorでwebviewクラスのloadData()を使えばできますよ。

wv.loadData(
"<html>"
+ "<head>"
+ "<meta http-equiv=¥"content-type¥" content=¥"text/html;
charset=UTF-8¥">"
+ "</head>"
+ "<body>"
+ "<h3>読み込みに失敗しました。</h3>"
+ "</body>"
+ "</html>"
, "text/html", "utf-8");

70

unread,
Jun 10, 2011, 3:15:24 AM6/10/11
to 日本Androidの会
pitper様、はじめまして

返事が遅れて、申し訳ありません。
回答して頂き、有難うございます。

他に回答が有ると思っておらず、見るのを怠っていました。

loadData()ですが、『ページが見つかれませんでした。』の
変わりに、違う画面が出せそうだとは分かっていたのですが、
前の画面の情報を保持する方法が分からない為、
使用を断念しました。

もし、何かご存知で有れば、教えて頂きたく
お願いします。

以上

pitper

unread,
Jun 10, 2011, 3:53:25 AM6/10/11
to android-g...@googlegroups.com
こんにちは、pitperです。

すみません、少し質問を勘違いしていました。
再読込をする形になりますがloadUrl()に保持したいURLを指定すればいけると思います。
戻るボタンなどで前のページに戻るようにしている場合は、一つ飛ばして戻る処理を入れる必要がありそうです。

この回答をするに当たって実際に確認をした訳ではないので、間違えているかも知れません。

以上です。
よろしくお願いします。

pitper

unread,
Jun 10, 2011, 4:05:16 AM6/10/11
to android-g...@googlegroups.com
こんにちは、pitperです。

先程の回答ですが、通信が切れていたら無理な話でした・・・。
すみません。

70

unread,
Jun 10, 2011, 4:13:00 AM6/10/11
to 日本Androidの会
pitper様

こんにちは。

当方も、質問の書き方が悪く申し訳ありません。

色々やって頂いた様で、有難うございます。

以上
Reply all
Reply to author
Forward
0 new messages