Please remove the call to loadUrl() inside shouldOverrideUrlLoading, and just return false from this function.
The problem is that you are calling back out to tell the webview to restart loading the URL from scratch, from wihtin the callback to tell you the WebView would like to load a URL, resulting in a loop of requests to load the URL.