gpt4 book ai didi

android - %3F 而不是我的 Retrofit URL 中的问号

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:39 27 4
gpt4 key购买 nike

我正在尝试将图片发送到服务器。我的网址包含一些关于我手机的参数:

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
);

使用 MultipartBuilder 创建它:

protected RequestBody buildAvatar(String avatarPath) {


MultipartBuilder builder = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart(ParkApiUrl.PARAM_USER_NAME, name.getText().toString())
.addFormDataPart(ParkApiUrl.PARAM_USER_SECOND_NAME, lastName.getText().toString())
.addFormDataPart(ParkApiUrl.PARAM_EMAIL, email.getText().toString())
.addFormDataPart(ParkApiUrl.PARAM_USER_ENCODED_PASSWORD,
PasswordUtils.encodePassword(encodePassword()))
.addFormDataPart(ParkApiUrl.PARAM_USER_GENDER,
male.isChecked() ? EmailProfile.GENDER_MALE : EmailProfile.GENDER_FEMALE)
.addFormDataPart(ParkApiUrl.PARAM_PARSE_ID,
ParseInstallation.getCurrentInstallation().getObjectId());


File file = new File(avatarPath);;
int size = (int) file.length();
byte[] bytes = new byte[size];
try {
BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
buf.read(bytes, 0, bytes.length);
buf.close();
builder.addFormDataPart("photo", "image.jpg", RequestBody.create(MEDIA_TYPE_JPG, bytes));
} catch (IOException e) {
e.printStackTrace();
}
return builder.build();
}

这就是为什么我无法使用例如:

@FieldMap Map<String, String> params

在那里传递我的参数,因为@FieldMap 需要@FormUrlEncoded 而我无法使用@FormUrlEncoded 发出@Body 请求。

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

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

更新: <-- 403 禁止 https://api.example.com/api/v2/user/5984/validate_password当我使用@Field 注释时:

@FormUrlEncoded
@POST("/{url}")
Observable<BooleanResponse> validatePassword(
@Header("x-device-id") String deviceId,
@Field(ParkApiUrl.PARAM_USER_ENCODED_PASSWORD) String password,
@Field(ParkApiUrl.PARAM_HEIGHT) String height,
@Field(ParkApiUrl.PARAM_WIDTH) String width,
@Field(ParkApiUrl.PARAM_TARGET) String target,

@Path(value = "url", encoded = true) String method
);

当我这样使用它时一切正常:

@FormUrlEncoded
@POST("/api/v2/user/5984/validate_password?_height=1184&_target=android%2F2&_width=768&_user_id=5984") //full url
Observable<BooleanResponse> validatePassword(
@Header("x-device-id") String deviceId,
@Field(ParkApiUrl.PARAM_USER_ENCODED_PASSWORD) String password
);

我想删除 %3F 或学习如何在 POST 请求中使用 Field 而不会收到 FORBIDDEN

最佳答案

Retrofit 不会让您将查询字符串放在路径中。看看@QueryMap相反,这是为此而设计的。

关于android - %3F 而不是我的 Retrofit URL 中的问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36419184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com