Android URISyntaxError,当我调用request.setURI(新URI(url))时,url在所有浏览器上都正常工作

Android URISyntaxError,当我调用request.setURI(新URI(url))时,url在所有浏览器上都正常工作,android,Android,我有一个问题,当我为JSON响应调用一个带有许多参数的url时,它会显示一个URISyntaxError,但相同的url在所有浏览器上都可以正常工作。我不明白出了什么问题 The URL is: http://apibeta.highgearmedia.com/v1/vehicles/get-make-models.json?sort=mpg&filter=category&client-id=10030812&from=convertible&signature

我有一个问题,当我为JSON响应调用一个带有许多参数的url时,它会显示一个URISyntaxError,但相同的url在所有浏览器上都可以正常工作。我不明白出了什么问题

The URL is: http://apibeta.highgearmedia.com/v1/vehicles/get-make-models.json?sort=mpg&filter=category&client-id=10030812&from=convertible&signature=QOwiWhG2T47KaQoyUztbag==
代码:

错误:

05-10 23:03:45.326: W/System.err(2227): java.net.URISyntaxException: Illegal character in query at index 161: http://apibeta.highgearmedia.com/v1/vehicles/get-make-models.json?sort=mpg&filter=category&client-id=10030812&from=convertible&signature=QOwiWhG2T47KaQoyUztbag==
05-10 23:03:45.326: W/System.err(2227):     at java.net.URI.validateQuery(URI.java:434)
05-10 23:03:45.326: W/System.err(2227):     at java.net.URI.parseURI(URI.java:340)
05-10 23:03:45.335: W/System.err(2227):     at java.net.URI.<init>(URI.java:72)
05-10 23:03:45.335: W/System.err(2227):     at com.TCC.android.ResearchList.getJsonSring(ResearchList.java:3892)
05-10 23:03:45.335: W/System.err(2227):     at com.TCC.android.ResearchList$67.run(ResearchList.java:4077)
05-10 23:03:45.326:W/System.err(2227):java.net.URISyntaxException:索引161处的查询中存在非法字符:http://apibeta.highgearmedia.com/v1/vehicles/get-make-models.json?sort=mpg&filter=category&client-id=10030812和from=敞篷车和签名=QOWWHG2T47KAQOYUZTBAG==
05-10 23:03:45.326:W/System.err(2227):位于java.net.URI.validateQuery(URI.java:434)
05-10 23:03:45.326:W/System.err(2227):位于java.net.URI.parseURI(URI.java:340)
05-10 23:03:45.335:W/System.err(2227):位于java.net.URI(URI.java:72)
05-10 23:03:45.335:W/System.err(2227):位于com.TCC.android.ResearchList.getjsonstring(ResearchList.java:3892)
05-10 23:03:45.335:W/System.err(2227):在com.TCC.android.ResearchList$67.run(ResearchList.java:4077)
根据并根据基础(§2.2和3.4),
=
是保留字符,应转义(
%3D
用于
=


顺便说一句,您应该使用android.net.URI

如果您遇到问题,这里有一个解决方案,一个将从url中删除所有无效字符的函数。在这个函数中传递url,您将获得一个带有编码字符串的新url

public static String convertURL(String str) {

    url = null;
    try{
    url = new String(str.trim().replace(" ", "%20").replace("&", "%26")
            .replace(",", "%2c").replace("(", "%28").replace(")", "%29")
            .replace("!", "%21").replace("=", "%3D").replace("<", "%3C")
            .replace(">", "%3E").replace("#", "%23").replace("$", "%24")
            .replace("'", "%27").replace("*", "%2A").replace("-", "%2D")
            .replace(".", "%2E").replace("/", "%2F").replace(":", "%3A")
            .replace(";", "%3B").replace("?", "%3F").replace("@", "%40")
            .replace("[", "%5B").replace("\\", "%5C").replace("]", "%5D")
            .replace("_", "%5F").replace("`", "%60").replace("{", "%7B")
            .replace("|", "%7C").replace("}", "%7D"));
    }catch(Exception e){
        e.printStackTrace();
    }
    return url;
}
publicstaticstringconvertURL(stringstr){
url=null;
试一试{
url=新字符串(str.trim().replace(“,“%20”).replace(“&”,“%26”)
.replace(“,”,“%2c”)。replace(“,“%28”)。replace(“),“%29”)
.replace(“!”,“%21”)。replace(“=”,“%3D”)。replace(“,“%3E”)。replace(“#”,“%23”)。replace(“$”,“%24”)
.replace(“,“%27”)。replace(“*”,“%2A”)。replace(“-”,“%2D”)
.replace(“.”,“%2E”)。replace(“/”,“%2F”)。replace(“:”,“%3A”)
.replace(“;”,%3B”)。replace(“?”,%3F”)。replace(“@”,%40”)
.replace(“[”,%5B”)。replace(“\\”,%5C”)。replace(“],%5D”)
.replace(“\”,“%5F”)。replace(“`,“%60”)。replace(“{”,“%7B”)
.replace(“|”和“%7C”)。replace(“}”和“%7D”);
}捕获(例外e){
e、 printStackTrace();
}
返回url;
}

问题依然存在,request.setURI(新Uri(api_url))不支持android.net.Uri;和%3D不起作用,而不是=
public static String convertURL(String str) {

    url = null;
    try{
    url = new String(str.trim().replace(" ", "%20").replace("&", "%26")
            .replace(",", "%2c").replace("(", "%28").replace(")", "%29")
            .replace("!", "%21").replace("=", "%3D").replace("<", "%3C")
            .replace(">", "%3E").replace("#", "%23").replace("$", "%24")
            .replace("'", "%27").replace("*", "%2A").replace("-", "%2D")
            .replace(".", "%2E").replace("/", "%2F").replace(":", "%3A")
            .replace(";", "%3B").replace("?", "%3F").replace("@", "%40")
            .replace("[", "%5B").replace("\\", "%5C").replace("]", "%5D")
            .replace("_", "%5F").replace("`", "%60").replace("{", "%7B")
            .replace("|", "%7C").replace("}", "%7D"));
    }catch(Exception e){
        e.printStackTrace();
    }
    return url;
}