[英]android programming NameValuePair removed for api 23
我一直在关注此代码的在线教程。 并将发布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。 我该如何更改此代码?
请帮我。
使用httpMime.jar将数据发送到服务器数据库。
从这里下载.jar并将其粘贴到libs文件夹中。
用法:
MultipartEntity multi = new MultipartEntity();
multi.addPart("username", new StringBody("Kgandroid"));
multi.addPart("password", new StringBody("nopass"));
这是namevaluepairs的完美替代品。
对于URLEncodedUtils:
读这个 。
你会找到:
此预览删除了对Apache HTTP客户端的支持。 如果您的应用使用此客户端并定位到Android 2.3(API级别9)或更高版本,请改用HttpURLConnection类。 此API更高效,因为它通过透明压缩和响应缓存减少了网络使用,并最大限度地降低了功耗。
所以现在我们必须使用HttpUrlConnection
这里将提供使用HttpUrlConnection的简单教程。
这是使用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;
}
您可以手动将HttpClient库添加到项目中
这不是你想要的,但它非常接近:
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);
}
它从您方法的前参数extras
创建一个Uri
,看起来像您的url的查询部分。 之后,您可以调用getQueryParameterNames
来检索一Set
键,并从每个键中检索一个List<String>
,它表示该特定键所包含的附加项的每个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.