在android studio中构建url时如何对特殊字符进行编码?

How to encode special characters while building url in android studio?

提问人:Kushagra Kumar 提问时间:3/21/2021 更新时间:3/22/2021 访问量:472

问:

我正在尝试使用特殊字符和运算符对 URL 进行编码。这是 URL 的样子:OR

https://example.net/house/info?_queryFilter=_id+eq+%27333a22e7-5g5g-4sd5-df67-fg66a9da8027%27+or+_id+eq+%2756nm67d0-7687-4d70-fg45-22d6745423a7%27

注意:在上面的 URL 中表示333a22e7-5g5g-4sd5-df67-fg66a9da802756nm67d0-7687-4d70-fg45-22d6745423a7houseID

这是我用来循环遍历的代码:houseID

for (int i = 0; i < apiResponse.getHouses().size(); i++) {
        if (houseQuery == null) {
            houseQuery = "_id+eq+".concat("'").concat(apiResponse.getHouses().get(i).getHouseId()).concat("'");
        } else {
            houseQuery = houseQuery.concat("+or+_id+eq+").concat("'").concat(apiResponse.getHouses().get(i).getHouseId()).concat("'");
        }
    } 

这是我的 API 接口:

@GET(UrlConstants.URL_GET_HOUSE)
void getHouseInfo(
        @Header(Constants.HEADER_SESSIONID) String sessionID,
        @Query(Constants.QUERY_FILTER) String query,
        Callback<HouseInfoResponse> houseInfoResponseCallback);

我在日志中收到以下错误:

{"code":400,"reason":"Bad Request","message":"The value '_id+eq+'333a22e7-5g5g-4sd5-df67-fg66a9da8027'+or+_id+eq+'56nm67d0-7687-4d70-fg45-22d6745423a7'' for parameter '_queryFilter' could not be parsed as a valid query filter"}

我将不胜感激。

安卓 URL UTF-8 UrlenCode

评论

0赞 JosefZ 3/21/2021
这回答了你的问题吗?Android 中的 URL 编码

答:

0赞 user12619138 3/21/2021 #1

尝试对您的 URL 进行编码以查看它是否有效,例如使用 %27 而不是 '

您可以使用此网站进行编码

0赞 Kushagra Kumar 3/22/2021 #2

问题在于,登录被替换为两位数的十六进制表示形式,以 ) 开头,即 . 服务器不需要查询前缀和 .+_id+eq+%%2B+_id+eq++or+_id+eq+

溶液:在指定属性的同时指定 as 有效。encodeValueFalseQuery

@Header(Constants.HEADER_SESSIONID) String sessionID,
@Query(value = Constants.QUERY_FILTER, , encodeValue = false) String query,
    Callback<HouseInfoResponse> houseInfoResponseCallback);