如何从URL获取参数值

时间:2016-11-03 07:38:22

标签: android android-webview

我在从下面提到的网址中获取参数时遇到了问题,

String url = http://example.com/api_callback#access_token=XXXXXXXXXXXXXXX&state=enabled&scope=profile%20booking&token_type=bearer&expires_in=15551999

我提取参数的代码如下:

Uri uri = Uri.parseurl(url); 
Set<String> paramNames = uri.getQueryParameterNames();

但是,您可以在网址中看到“#”而不是“?”这就是为什么我无法获得参数Set。

首先我想到的是用“?”代替“#”使用String.replace方法然后我认为他们可能是更好的解决方案。所以,如果你们有更好的解决方案,请帮助我。

4 个答案:

答案 0 :(得分:2)

&#39;#&#39;被称为参考参数,在这里你可以做两件事之一,或者替换&#39;#&#39;用&#39;?&#39;并处理你的uri,即

String url = "http://example.com/api_callback#access_token=XXXXXXXXXXXXXXX&state=enabled&scope=profile%20booking&token_type=bearer&expires_in=15551999";
url = url.Replace("#","?"); //now your URI object to proceed further

或其他替代

String url = "http://example.com/api_callback#access_token=XXXXXXXXXXXXXXX&state=enabled&scope=profile%20booking&token_type=bearer&expires_in=15551999";
URL myurl = new URL(url);
String refrence = myurl.getRef(); //returns whatever after '#'
String[][] params = GetParameters(refrence);

并且函数GetParameters()的定义如下:

private String[][] GetParameters(String r)
{
   try
    {
       String[] p = r.split("&"); //separate parameters mixed with values
       String[][] data = new String[p.length][2];
       for(int i = 0 ; i<p.length; i++) //iterate whole array
        {
           data[i][0] = p[i].split("=")[0];  //parameter name
           data[i][1] = p[i].split("=")[1];  //parameter value
           data[i][1] = data[i][1].replace("%"," "); //replace % with space character
        }
        return data;  //return result
    }
    catch(Exception e)
    {
       return null;
    }
}

我没有执行和测试代码我也很懒,所以我希望你能适应lolz:D

答案 1 :(得分:2)

最简单的方法:

 String string = url.replace("#","?");
 String access_token = Uri.parse(string).getQueryParameter("access_token");

 Log.d("TAG", "AccessToken: " + access_token);

现在,您只需传递名称即可从网址中获取任何参数。

祝你好运

答案 2 :(得分:0)

您可以使用Android中的Uri类来执行此操作; https://developer.android.com/reference/android/net/Uri.html

Uri uri = Uri.parse("http://www.chalklit.in/post.html?chapter=V-Maths-Addition%20&%20Subtraction&post=394");
//Then you can even get a specific element from the query parameters as such;
String chapter = uri.getQueryParameter("chapter");  //will return "V-Maths-Addition "

答案 3 :(得分:0)

Uri uri = Uri.parse("http://www.chalklit.in/post.html?chapter=V-Maths- Addition%20&%20Subtraction&post=394");
String server = uri.getAuthority();
String path = uri.getPath();
String protocol = uri.getScheme();
Set<String> args = uri.getQueryParameterNames();

然后您甚至可以从查询参数中获取特定元素

String chapter = uri.getQueryParameter("key");