uri.getQueryParameter()返回null值

时间:2015-09-23 01:38:56

标签: java android

我在类中有以下代码:

@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的任何想法?

编辑:出于某种原因,当我尝试其他网址方案时,它会正确解析。

我需要解析但不起作用的网址: http://www.website.com/#access_token=tokenstringhere&token_type=bearer&state=randomStringHere&expires_in=3600&scope=identity+submit

一个有效的类似网址: http://www.website.com/?state=cnmdr6&code=tokenStringHere

什么会导致第一个解析失败,但第二个解析会正确解析?

1 个答案:

答案 0 :(得分:1)

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

您的网址无效,因为您在查询网址之前错过了问号?。 您的网址应如下所示: http://www.website.com/?access_token=tokenstringhere&token_type=bearer&state=randomStringHere&expires_in=3600&scope=identity+submit 请检查documentation