从Android的URL中提取参数值

8
public static Hashtable parseUrlString(String url) {
    Hashtable parameter = new Hashtable();
    List<NameValuePair> params = null;
    try {
        params = URLEncodedUtils.parse(new URI(url), "UTF-8");
        for (NameValuePair param : params) {
            if (param.getName() != null && param.getValue() != null)
                parameter.put(param.getName(), param.getValue());
        }
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    return parameter;
}

上述方法对我来说可以提取带有值的参数名称到哈希表中,但在Api 21+中,NameValuePair和URLEncodedUtils已经被弃用,那么我应该用什么最好的方法来替换这个方法?
5个回答

13
在Android中,不应该使用已经弃用的 URLEncodedUtils。一个好的替代方案是使用Uri类:通过使用getQueryParameterNames()获取查询参数键,然后在这些键上进行迭代,并使用getQueryParameter()获取每个值。

12

你可以使用android.net.Uri。

Uri uri=Uri.parse(url);

它具有getQueryParameterNames()和uri.getQueryParameter(parameterNameString)方法;


谢谢您的答复 :) - Vaisakh N

9

已经有答案了,但是我来写一下具体的方法:

public static HashMap<String, String> getQueryString(String url) {
    Uri uri= Uri.parse(url);

    HashMap<String, String> map = new HashMap<>();
    for (String paramName : uri.getQueryParameterNames()) {
        if (paramName != null) {
            String paramValue = uri.getQueryParameter(paramName);
            if (paramValue != null) {
                map.put(paramName, paramValue);
            }
        }
    }
    return map;
}

9

尝试:

 Uri uri = Uri.parse(yourStrUrl);
 String paramValue = uri.getQueryParameter("yourParam");

0
你可以尝试使用ContentValues。
for (ContentValues param : params) {
            if (param.getName() != null && param.getValue() != null)
                parameter.put(param.getName(), param.getValue());
        }

谢谢您的回复,我还有一个问题,URLEncodedUtils也已经过时了 :( - Vaisakh N

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