我有一个https://stackexchange.com/oauth/login_success#access_token=token&expires=5678形式的重定向uri。我试图从这个网址获取访问令牌。尝试了以下方法
uri.getQueryParameter("access_token"); //will return null since it is not a query param
uri.getFragment(); //will return "access_token=token&expires=5678" so i need to seperate it again.
任何直接方法?请帮忙
答案 0 :(得分:2)
简单而优雅的解决方案,可以获得您想要的值:
public static Map<String, String> parseUrlFragment (String url) {
Map<String, String> output = new LinkedHashMap<> ();
String[] keys = url.split ("&");
for (String key : keys) {
String[] values = key.split ("=");
output.put (values[0], (values.length > 1 ? values[1] : ""));
}
return output;
}
它使用LinkedHashMap
来表示值,因此它是输出:
Map<String, String> data = parseUrlFragment (uri.getFragment ());
data.get ("access_token") // token
data.get ("expires") // 5678
答案 1 :(得分:1)
有人可能会觉得有用
String queryAfterFragment = uri.getFragment();
String dummy_url = "http://localhost?" + queryAfterFragment;
Uri dummy_uri = Uri.parse(dummy_url);
String access_token = dummy_uri.getQueryParameter("access_token");
作品魅力十足且易于使用,稍后谢谢:-)
答案 2 :(得分:0)
你可以这样试试
String str = "https://stackexchange.com/oauth/
login_success#access_token=token&expires=5678";
int indexOfHash = str.indexOf("#");
// now you can substring from this
String subStr = str.substring(indexOfHash+1, str.length());
System.out.println(subStr);
// now you can substring from &
String sStr=subStr.substring(0,subStr.indexOf("&"));
System.out.println(sStr);
// now you can get token
String[] arr=sStr.split("=");
System.out.println(arr[0]);
System.out.println(arr[1]);
Out put
access_token=token&expires=5678
access_token=token
access_token
token
答案 3 :(得分:0)
您可以将String方法split(String)与Regex
一起使用str.split("#|&|=")
这会通过传递的3个字符拆分字符串,然后得到一个包含所有拆分部分的数组。
String s =
"https://stackexchange.com/oauth/login_success#access_token=token&expires=5678";
final String[] split = s.split("#|&|=");
for (String s1 : split) {
System.out.println(s1);
}
输出:
https://stackexchange.com/oauth/login_success
access_token
token
expires
5678