Android:使用'+';从uri签名

Android:使用'+';从uri签名,android,uri,Android,Uri,我无意中得到了一个数据Uri,并尝试解析属性。但是,如果该属性包含一个“+”符号,则getQueryParameter(attr)方法会将其转换为 因此,如果参数包含一个“+”符号,则此项不起作用 并且正在将“+”转换为“\ 我的Uri看起来有点像这样:“MyApp://?Attr=fdwGcv+fsdsfd\u AS=“在创建url时对所有查询参数进行编码 String url = null; try { url = "MyApp:///?attr=" + URLEnc

我无意中得到了一个数据Uri,并尝试解析属性。但是,如果该属性包含一个“+”符号,则
getQueryParameter(attr)
方法会将其转换为

因此,如果参数包含一个“+”符号,则此项不起作用

并且正在将“+”转换为“\


我的Uri看起来有点像这样:
“MyApp://?Attr=fdwGcv+fsdsfd\u AS=“

在创建url时对所有查询参数进行编码

String url = null;
    try {
        url = "MyApp:///?attr=" + URLEncoder.encode("fdwGcv+fsdsfd_AS=", "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    Uri uri = Uri.parse(url);

    System.out.print("attr::"+uri.getQueryParameter("attr"));

你测试过这个代码吗?它正在返回null。即使在调用getQueryParameterNames()时,它也会返回一个大小为0的集\n代码经过测试,请检查-我使用的是“uri.getQueryParameter(“attr”)”方法谢谢您的回答,但我觉得不太方便。如果有多个参数用&分隔,代码将如何更改。为什么我要硬编码encode方法的第一个参数?答案只是为了说明如何对查询参数进行编码。如果查询参数有任何特殊字符,则必须在添加到url之前对其进行编码并进行检查。所有像getQueryParameterNames()这样的方法仍然有效,不需要硬编码。