我一直在关注此代码的在线教程。 并将发布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。如何更改此代码?
请帮帮我。
答案 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>
代表该附加内容的每个值包含该特定密钥。