web-dev-qa-db-ja.com

WebViewClient onReceivedErrorは非推奨、新しいバージョンではすべてのエラーが検出されない

Android SDK 23 onReceivedError(WebView view, int errorCode, String description, String failingUrl)は廃止され、onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)に置き換えられました。ただし、携帯電話を機内モードにしてURLを読み込むと、 WebView、非推奨バージョンのメソッドのみが呼び出されます。

onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse)も有用ではありません。500を超えるエラーのみを検出し、109ステータスコードを取得しています。

WebViewのロードに失敗したことを検出する非推奨の方法はありますか?

49
Martin Epsz

テストするモバイルデバイスは、実際にAndroid Marshmallow(API 23)を実行する必要があることに注意してください。 API 23 SDKでアプリを開発し、Android Lollipopでアプリを実行しても、「古い」onReceivedErrorを取得します。これはOSの機能であり、 SDK。

また、「エラーコード109」(これはnet::ERR_ADDRESS_UNREACHABLEであると思います)はHTTPエラーコードではなく、Chromeのエラーコードです。 onReceivedHttpErrorは、HTTP経由でサーバーから受信したエラーに対してのみ呼び出されます。デバイスが機内モードの場合、サーバーから応答を受信できない可能性があります。

26
Mikhail Naganov

次のこともできます。

@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
    // Handle the error
}

@TargetApi(Android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
    // Redirect to deprecated method, so you can use it in all SDK versions
    onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
}

インポートすることを確認してくださいAndroid.annotation.TargetApi

ハッピーコーディング!

125
xdevs23