Get HTTP Status Code in Android WebView

Viewed 35661

I'm developing an Android app that loads a website in a WebView, but sometimes the website returns HTTP code 500.

My question is: is there any way to get the HTTP status code from a WebView with a listener or with another class??

I tried to implement an WebViewClient, but I couldn't get the HTTP status code which WebView received.

9 Answers

You can override method onReceivedHttpError and there you can see the status code:

@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
    super.onReceivedHttpError(view, request, errorResponse);
    int statusCode = errorResponse.getStatusCode();
    // TODO: do your logic..
}

Full examples implementing a simple Activity

For API Level >= 23

Java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView myWebView = (WebView)findViewById(R.id.webview);
        myWebView.loadUrl("https://www.fñdghd.es");
        myWebView.setWebViewClient(new CustomWebViewClient());
    }

    private class CustomWebViewClient extends WebViewClient
    {
        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)
        {
            super.onReceivedError(view, request, error);
            Log.e("MainActivity",(String) error.getDescription());
            Log.e("MainActivity",String.valueOf(error.getErrorCode()));

            //Todo: Something to define.
        }
    }
}

C# for Xamarin or Maui

public class WebViewActivity : Activity
{
    protected override void OnCreate(Bundle? savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_webview);

        WebView myWebView = (WebView)FindViewById(Resource.Id.webview);
        myWebView.LoadUrl("https://www.google.es");
        myWebView.SetWebViewClient(new CustomWebViewClient());
    }
}

internal class CustomWebViewClient : WebViewClient
{
    public override void OnReceivedError(WebView view, IWebResourceRequest request, WebResourceError error)
    {
        base.OnReceivedError(view, request, error);
        Console.WriteLine(error.Description);
        Console.WriteLine(error.ErrorCode);

        //Todo: Something to define.
    }
}
Related