Android %3F而不是我的改装URL中的问号

Android %3F而不是我的改装URL中的问号,android,retrofit2,Android,Retrofit2,我正在尝试向服务器发送图片。我的URL包含有关我的手机的一些参数: api/v2/user/email_register%3F_height=1184&_target=android/2&_width=768 这就是工作变量: api/v2/user/email_register?_height=1184&_target=android/2&_width=768 (无刺激%3?代码) 此外,我正在尝试将我的照片传递到@Body中: @POST("/{url}

我正在尝试向服务器发送图片。我的URL包含有关我的手机的一些参数:

api/v2/user/email_register%3F_height=1184&_target=android/2&_width=768 
这就是工作变量:

api/v2/user/email_register?_height=1184&_target=android/2&_width=768
(无刺激%3?代码)

此外,我正在尝试将我的照片传递到@Body中:

@POST("/{url}")
Observable<UpdateUserInfoPayload> register(
        @Header("x-device-id") String deviceId,
        @Body RequestBody requestBody,
        @Path(value = "url", encoded = true) String  method
);
这就是我无法使用的原因,例如:

@FieldMap Map<String, String> params
@FieldMap-Map参数
在那里传递我的参数,因为@FieldMap需要@FormUrlEncoded,而我无法使用@FormUrlEncoded发出@Body请求

1) 如何从我的URL字符串中删除%3F?(外部改装一切正常!)

2) 有什么简单的方法可以发送图片吗

UPD:
改型不允许将查询字符串放入路径中。请看一看,这是专门为此设计的。

更好的办法是,发出多部分请求以发送图像

@Multipart
@POST("api/v2/user/email_register")
Observable<UpdateUserInfoPayload> register(@Part("_height") String height, @Part("_target") String target, @Part("_width") String width, @Part("imageFile") TypedFile file);
@Multipart
@POST(“api/v2/用户/电子邮件注册”)
可观察寄存器(@Part(“\u-height”)字符串高度、@Part(\u-target”)字符串目标、@Part(\u-width”)字符串宽度、@Part(“imageFile”)类型文件);
参考:

无需在改装中添加/删除%3F,它将自动处理作为参考:

我使用
@QueryMap
ImmutableMap

在我的例子中,API是:
/API/static\u pages/?q=A+B+C

我的解决方案:

步骤1:

@GET("/api/static_pages")
    Call<String> getStaticPagesByType(@HeaderMap HashMap<String, Object> header,
                               @QueryMap(encoded=true) Map<String, String> filters);
@GET(“/api/static\u页面”)
调用getStaticPagesByType(@HeaderMap HashMap头,
@QueryMap(编码=真)映射过滤器;
步骤2:当我想调用API时:

List<String> listTypes = new ArrayList<>();
listTypes.add("A");
listTypes.add("B");
listTypes.add("C");

StringBuilder typeString = new StringBuilder();

int listSize = listType.size();

for (int i = 0; i < listSize - 1; i++) {
    typeString.append(listType.get(i));
    if(i != listSize-2){
       typeString.append("+");
    }
}
// The key is here!
ImmutableMap<String, String> types = ImmutableMap.of("q", typeString.toString());
getRetrofitClient().getStaticPagesByType(yourHeader, types)
List listTypes=new ArrayList();
列表类型。添加(“A”);
列表类型。添加(“B”);
添加(“C”);
StringBuilder typeString=新的StringBuilder();
int listSize=listType.size();
for(int i=0;i
希望对你的工作有帮助


快乐编码。

如果需要传递包含路径和查询参数的动态URL字符串,则应使用
@URL


我仍然想摆脱这个%3F并打个问号。有什么想法吗?你也可以看到这个使用版本2的RequestBody+有什么解决方案吗?
@Multipart
@POST("api/v2/user/email_register")
Observable<UpdateUserInfoPayload> register(@Part("_height") String height, @Part("_target") String target, @Part("_width") String width, @Part("imageFile") TypedFile file);
@GET("/api/static_pages")
    Call<String> getStaticPagesByType(@HeaderMap HashMap<String, Object> header,
                               @QueryMap(encoded=true) Map<String, String> filters);
List<String> listTypes = new ArrayList<>();
listTypes.add("A");
listTypes.add("B");
listTypes.add("C");

StringBuilder typeString = new StringBuilder();

int listSize = listType.size();

for (int i = 0; i < listSize - 1; i++) {
    typeString.append(listType.get(i));
    if(i != listSize-2){
       typeString.append("+");
    }
}
// The key is here!
ImmutableMap<String, String> types = ImmutableMap.of("q", typeString.toString());
getRetrofitClient().getStaticPagesByType(yourHeader, types)
@POST(
Observable<UpdateUserInfoPayload> register(
        @Header("x-device-id") String deviceId,
        @Body RequestBody requestBody,
        @Url String method
);
https://api.example.com/api/v2/user/email_register?_height=1184&_target=android/2&_width=768