ale*_*sov 14 android retrofit2
我正在尝试将图片发送到服务器.我的网址包含有关手机的一些参数:
api/v2/user/email_register%3F_height=1184&_target=android/2&_width=768
Run Code Online (Sandbox Code Playgroud)
这是工作变体:
api/v2/user/email_register?_height=1184&_target=android/2&_width=768
Run Code Online (Sandbox Code Playgroud)
(没有刺激%3?代码)
另外,我试图在@Body中传递我的照片:
@POST("/{url}")
Observable<UpdateUserInfoPayload> register(
@Header("x-device-id") String deviceId,
@Body RequestBody requestBody,
@Path(value = "url", encoded = true) String method
);
Run Code Online (Sandbox Code Playgroud)
使用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();
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么我无法使用例如:
@FieldMap Map<String, String> params
Run Code Online (Sandbox Code Playgroud)
在那里传递我的参数,因为@FieldMap需要@FormUrlEncoded而我无法用@FormUrlEncoded制作@Body请求.
1)如何从我的URL字符串中删除%3F?(外部改造一切都很好!)
2)有没有简单的方法来发送图片?
UPD: < - 403 当我使用@Field注释时禁止使用https://api.example.com/api/v2/user/5984/validate_password:
@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
);
Run Code Online (Sandbox Code Playgroud)
当我像这样使用它时,一切都有效:
@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
);
Run Code Online (Sandbox Code Playgroud)
我想要删除%3F或学习如何在POST请求中使用Field而不获取FORBIDDEN
| 归档时间: |
|
| 查看次数: |
3026 次 |
| 最近记录: |