shouldOverrideUrlLoading dans WebView pour Android pas en cours d'exécution
-Edit: Solution Trouvée-
Compris après quelques lourds de la recherche - une personne (je veux dire littéralement que l'on) dit ils ont plutôt utilisé onPageLoad(); qui a fonctionné parfaitement à mes besoins. La différence est que onPageLoad() s'exécute au plus tard shouldOverrideUrlLoading, mais Il n'est pas de faire une différence dans mon code.
Je suis en train de configurer Twitter avec l'autorisation OAuth pour une application Android, et à ce jour je peux réussir à envoyer à l'utilisateur l'autorisation d'URL, cependant, ce que je suis en train de faire maintenant est d'intercepter les rediriger à la fonction de rappel (ce qui pourrait conduire à une erreur 404, notre URL de callback n'allez pas avoir une page sur nos serveurs). Ce que j'essaie de faire est de vérifier si l'URL est notre rappel, puis d'en extraire les OAuth Vérificateur à partir de l'URL. J'ai paramétré mon WebView avec ce code:
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());
Chose est même Système.out.println("url");(dont je suis l'aide de débogage)ne fonctionne pas! Donc, je suis assez sèche sur les idées, et ne peut pas trouver quelqu'un avec un problème similaire. L'autorisation de l'URL passe par de bien, et je peux réussir à autoriser l'application, cependant le rediriger vers l'URL de callback pour une raison quelconque jamais obtenir est intercepté. Toute aide serait appréciée, c'est dans ma onResume (), si les questions.
- Êtes-vous sûr que shouldOverrideUrlLoading est la bonne méthode que vous souhaitez remplacer?
- Je suis assez sûr - aussi loin Que je l'ai lu, il est exécuté à chaque fois qu'une URL est chargé
- eh bien, si
System.out.println("url");
n'est pas en cours d'exécution je pourrais simplement le triple de contrôle vous écrasez la bonne méthode - J'ai été en regardant autour, et Il semble être ce que je suis à la recherche pour. Je ne peux pas trouver quelqu'un avec un problème similaire; si rien le problème dans la plupart des cas avec cette méthode est qu'elle s'exécute à CHAQUE fois qu'une URL est chargé.
- J'ai mis en place un projet de test pour cela, et Im avoir exactement le même problème... semble que cela est recommandé de trop, Mauvais vous tenir au courant.
- Je vais avoir ce même problème sur l'émulateur, mais pas sur des dispositifs réels. Bizarre.
Vous devez vous connecter pour publier un commentaire.
Après quelques recherches, j'ai conclure qu'en dépit de ce que la plupart des tutoriaux il dire,
shouldOverrideUrlLoading()
ne pas appelée lorsque:Vous charger une URL comme
Le navigateur redirige automatiquement l'utilisateur via une Redirection HTTP. (Voir le commentaire de @hmac ci-dessous concernant les redirections)
Il n'est cependant, quand vous cliquez sur un lien à l'intérieur d'une page web à l'intérieur de la webview. IIRC le twitter d'autorisation utilise une Redirection HTTP.. la Poisse, ce serait utile si elle a travaillé comme tous les tutoriels dire qu'il fait. Je pense que c'est à partir d'une très vieille version de l'API Android...
Vous pourriez envisager la substitution de la
onProgressChanged
méthode deWebChromeClient
comme ici: Comment écouter pour une WebView fin du chargement d'une URL? ou laonPageFinished()
méthode de laWebViewClient
.shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
est également appelé pour que les redirections mais avecrequest.isRedirect()
vous pouvez contrôler comme vous le souhaitezJ'ai trouvé ce que je pense est une façon raisonnable de faire cela grâce à la réponse précédente et les observations de me pointer dans la bonne direction.
Ce que j'ai fait est de remplacer onPageStarted et onPageFinished personnalisé dans un WebViewClient.
Le code va quelque chose comme ceci...
Et bien sûr avec le Journal.d vous mettre n'importe quel code spécifique que vous souhaitez exécuter lors de la détection de la redirection.
Pour les personnes de tomber sur ce, lorsque la méthode
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
n'est pas appelée, recherchez votreminSdkVersion
. Si vous utilisez ci-dessous API 24 vous devez utilisershouldOverrideUrlLoading(WebView view, String url)
.