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

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

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

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-22d6745423a7表示houseID

这是我用来循环 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 进行编码以查看它是否有效,例如使用 %27 而不是 '

您可以使用此网站to encode

问题是 _id+eq+ 中的符号 + 被替换为两位十六进制表示,从 %) 开始,即 %2B。 服务器不期望查询前缀 _id+eq++or+_id+eq+.

中的 + 编码

解法: 在指定 Query 属性时将 encodeValue 指定为 False

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