Android %3F而不是我的改装URL中的问号
我正在尝试向服务器发送图片。我的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}
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