uri.getQueryParameter() 返回 null 值

3

我在一个类中有以下代码:

@Override
        public boolean shouldOverrideUrlLoading(WebView wv, String url)
        {
            if (url.startsWith(Constants.OAUTH_REDIRECT))
            {
                Uri uri = Uri.parse(url);

                String state = uri.getQueryParameter("state");

                if (state != null && state.equals(Constants.randString))
                {
                    String error = uri.getQueryParameter("error");

                    if (error != null && error.length() > 0)
                    {
                        if (error.equals("access_denied"))
                        {
                            //user chose not to login
                            Log.d("oAuthView", "Access Denied");
                            finish();
                        }
                        else
                        {
                            Toast.makeText(getApplicationContext(), error, Toast.LENGTH_LONG).show();
                            finish();
                        }
                    }

                    //Go back to MainActivity with authorization code
                    Intent resultIntent = getIntent();
                    resultIntent.putExtra("authCode", uri.getQueryParameter("code"));

                    setResult(RESULT_OK, resultIntent);

                    finish();

                    return true;
                }
            }
            return false;
        }

出现了某些原因导致我在尝试捕获“state”时得到了一个空值,即使我已经确保它在URL中存在。这意味着应用程序从不进入后面的if语句。我也检查过,当我尝试捕获authCode时,同样的情况也发生了。你有任何想法为什么它们会返回null吗?

编辑:由于某种原因,当我尝试替代的URL方案时,它可以正确解析。

我需要解析但无法正常工作的URL: http://www.website.com/#access_token=tokenstringhere&token_type=bearer&state=randomStringHere&expires_in=3600&scope=identity+submit

一个类似的可行的URL: http://www.website.com/?state=cnmdr6&code=tokenStringHere

是什么造成第一次解析失败而第二次可以正确解析?


你尝试过在解析它之前和之后记录 urluri 的注销日志吗? - blurfus
是的。我使用了调试器来确保解析过程中一切都正确。 - Jacob Malachowski
如果您能发布URL(已编辑)以便重现您的问题,那将会很有帮助。 - njzk2
如果您要尝试自己复现此内容,请注意它是 WebView 的一部分。 - Jacob Malachowski
1个回答

3

如果有人正在寻找解决方案。

你的url无效,因为在url中的查询之前你错过了问号符号?。你的url应该像这样: http://www.website.com/?access_token=tokenstringhere&token_type=bearer&state=randomStringHere&expires_in=3600&scope=identity+submit 请查看文档资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接