android编程NameValuePair已移除api 23

时间:2015-09-11 07:32:48

标签: java android

我一直在关注此代码的在线教程。 并将发布google play with android api 23 Marshmallow。

 private Map<String, String> decodeExtras(String extras) {
    Map<String, String> results = new HashMap<String, String>();
    try {
        URI rawExtras = new URI("?" + extras);
        List<NameValuePair> extraList = URLEncodedUtils.parse(rawExtras, "UTF-8");
        for (NameValuePair item : extraList) {
            String name = item.getName();
            int i = 0;
            while (results.containsKey(name)) {
                name = item.getName() + ++i;
            }
            results.put(name, item.getValue());
        }
    } catch (URISyntaxException e) {
        Log.w(TAG, "Invalid syntax error while decoding extras data from server.");
    }
    return results;
}

但是在api23 Marshmallow中删除了NameValuePair和URLEncodedUtils。如何更改此代码?

请帮帮我。

3 个答案:

答案 0 :(得分:2)

以下是使用android.net.Uri API等级11(Honeycomb)及更高版本的等效代码。这段代码非常简单,因此仅仅为了避免出现这一问题,引入第三方API或旧版API实际上没有意义。

private Map<String, String> decodeExtras(String extras) {
    Map<String, String> results = new HashMap<>();
    Uri uri = new Uri.Builder().encodedQuery(extras).build();
    Set<String> parameterNames = uri.getQueryParameterNames();
    for (String parameterName : parameterNames) {
        List<String> values = uri.getQueryParameters(parameterName);
        int count = values.size();
        if (count >= 1) {
            results.put(parameterName, values.get(0));
            for (int i = 1; i < count; ++i) {
                results.put(parameterName + i, values.get(i));
            }
        }
    }
    return results;
}

答案 1 :(得分:0)

您可以手动将HttpClient库添加到项目中

答案 2 :(得分:0)

这不是你想要的,但它非常接近:

Uri.Builder builder = new Uri.Builder()
  .query(extras);
Uri uri = builder.build();
Set<String> keys = uri.getQueryParameterNames();
Iterator<String> iterator = x.iterator();
HashMap<String, List<String>> map = new HashMap<>();
while(iterator.hasNext()) {
       String key = iterator.next();
       List<String> values = uri.getQueryParameters(key);
       map.put(key, values);
}

它会从您方法的前一个参数Uri创建一个extras,它看起来像您的网址的查询部分。在此之后,您可以致电getQueryParameterNames以检索Set个密钥,并从每个密钥中List<String>代表该附加内容的每个值包含该特定密钥。