forOverrideUrlLoading在WebView for Android中未运行

-Edit:find解决方案 –
在经过一番繁重的搜索后想出来 – 一个人(我的意思是一个人)说他们改为使用onPageLoad(); 这完全符合我的目的。 区别在于onPageLoad()的运行时间晚于shouldOverrideUrlLoading,但它对我的代码没有影响。

我正在尝试使用OAuth为Android应用程序设置Twitter授权,到目前为止我可以成功将用户发送到授权URL,但是,我现在要做的是拦截重定向到回调(这只是导致404错误,我们的回调URL不会在我们的服务器上有关联的页面)。 我试图做的是检查URL是否是我们的回调,然后从URL中提取OAuth Verifier。 我使用以下代码设置我的WebView:

view = (WebView)findViewById(R.id.twitterWbVw); view.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView wView, String url) { String urlHolder; String[] verifExtrctr; urlHolder = url.substring(0, url.indexOf('?')); System.out.println("url"); if(urlHolder.equalsIgnoreCase(CALLBACK_URL)) { verifExtrctr = urlHolder.split("?"); verifExtrctr = verifExtrctr[2].split("="); if(verifExtrctr[0].equalsIgnoreCase("oauth_verifier")) { params[5] = verifExtrctr[1]; return true; } else { System.out.println("Inocorrect callback URL format."); } } else { wView.loadUrl(url); } return true; } }); view.loadUrl(urlAuthorize.toExternalForm()); 

事情甚至是System.out.println(“url”); (我用来调试) 不运行! 所以我的想法非常枯燥,找不到有类似问题的人。 授权URL运行良好,我可以成功授权应用程序,但由于某种原因重定向到回调URL永远不会被截获。 任何帮助将不胜感激,这是在我的onResume(),如果这很重要。

Solutions Collecting From Web of "forOverrideUrlLoading在WebView for Android中未运行"

经过一些研究后我得出结论,尽管大多数教程都说过, shouldOverrideUrlLoading()在以下情况下不会调用shouldOverrideUrlLoading()

  1. 你加载一个像这样的URL

     loadUrl("http://www.google.com"); 
  2. 浏览器通过HTTP重定向自动重定向用户。 (请参阅以下有关重定向的@hmac的评论)

但是 ,当您单击webview内的网页内的链接时, 它会被调用。 IIRC Twitter授权使用HTTP重定向。但是,如果所有教程都说它有用,这将是有用的。 我认为这是来自Android API的一个非常老的版本…

您可能需要考虑覆盖WebChromeClientonProgressChanged方法, WebChromeClient所示: 如何监听WebView完成加载URL? WebViewClientonPageFinished()方法。

我已经find了我认为合理的方法来做到这一点,这要归功于之前的回答和评论,指出了我正确的方向。

我所做的是在自定义WebViewClient中覆盖onPageStarted和onPageFinished。 代码就像这样……

 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { if (pendingUrl == null) { pendingUrl = url; } } @Override public void onPageFinished(WebView view, String url) { if (!url.equals(pendingUrl)) { Log.d(TAG, "Detected HTTP redirect " + pendingUrl + "->" + url); pendingUrl = null; } } 

当然,与Log.d一起,您将在检测重定向时放置您想要运行的任何特定代码。