質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1742閲覧

onReceivedError()の第一引数で受け取るオブジェクトは、何ですか?

snowsmile

総合スコア0

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/12/20 08:23

編集2021/12/20 08:32

前提・実現したいこと

WebViewClientにおけるonReceivedErrorハンドラの第一引数:WebView について知りたい。

当方の前提条件および疑問

▽前提条件
①.WebViewクラスにID情報などを追加した拡張クラス:WebViewExを実装済み
// public class WebViewEx extends WebView {…}
②.拡張クラスWebViewExにはURL情報を提供するための関数を実装済み
// public String getUrl(){return url;} // onReceivedErrorハンドラ用
③.メイン処理にて、WebViewExインスタンスに対してWebViewClientをセット
// WebViewExインスタンス.setWebViewClient(new WebViewClient();
④. setWebViewClientにて、onPageFinished及びonReceivedErrorハンドラ実装済み
// public void onPageFinished(WebView view, String url) {
// public void onReceivedError(WebView view, …) {
⑤.WebViewExインスタンスのloadUrl()実行エラー時にonReceivedError()の起動を確認
→その際、onReceivedError()が実行された際、引数としてWebView view…を受け取る。

▽疑問
上記⑤のonReceivedError処理内にて、拡張クラスWebViewExの情報が必要となりました。
onReceivedError()は引数にWebViewを受け取るため、拡張クラスWebViewExの情報をどのように参照するか思案しておりました。
試しに拡張クラスWebViewExに基底クラスに存在するgetUrl()と同名の関数をオーバーライドしたところ、WebViewではなく拡張クラスのWebViewExが実行されました。
結果的に意図した処理は実現できたのですが、何かもやもやしています。

疑問①
onReceivedError()イベントの第一引数で渡されるのは"setWebViewClient()した際のオブジェクト"という理解で合っておりますでしょうか?
疑問②
onReceivedError()のwebviewを利用して、その拡張クラスであるWebViewExにしか存在しない処理を実行する方法はありますでしょうか?

該当のソースコード

java

1WebViewEx v.setWebViewClient(new WebViewClient() { 2 // onReceivedErrorハンドラ 3 @Override 4 public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 5 // URL(IPアドレス)取得 6 view.getUrl(); // WebViewではなく拡張クラスWebViewExのgetUrl()が実行される 7 } 8}); 9

試したこと

リファレンスをチェックしたが要領を得ず。https://developer.android.com/reference/android/webkit/WebViewClient#onReceivedError(android.webkit.WebView,%20android.webkit.WebResourceRequest,%20android.webkit.WebResourceError)

補足情報(FW/ツールのバージョンなど)

開発環境:AndroidStudio(Arctic Fox 2020.3.1)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答1

0

自己解決

返信ありがとうございます。
ご指摘のように、以下のようにダウンキャストすることでサブクラスのメソッドにはアクセスすることができます。

WebViewEx v = (WebViewEx)view;
v.WebViewEx_function();

振る舞いからはonReceivedError()で渡されるwebviewは、"setWebViewClient()した際のオブジェクト(拡張クラスのオブジェクト)"のように見えます。
リファレンス等に詳しい記載が無い為ちょっと心配だったのですが、そういうことだと理解することにしました。
ありがとうございます。

投稿2021/12/20 16:13

snowsmile

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問