Sto provando a inviare un'immagine a un server. Il mio URL contiene alcuni parametri sul mio cellulare:% 3F anziché il punto interrogativo nel mio URL di retrofit
api/v2/user/email_register%3F_height=1184&_target=android/2&_width=768
e questa è la variante di lavoro:
api/v2/user/email_register?_height=1184&_target=android/2&_width=768
(? Senza irritazione% 3 codice)
Inoltre, sto cercando di passare la mia foto all'interno @Body:
@POST("/{url}")
Observable<UpdateUserInfoPayload> register(
@Header("x-device-id") String deviceId,
@Body RequestBody requestBody,
@Path(value = "url", encoded = true) String method
);
Creazione con MultipartBuilder:
01.235.164,106 milaprotected 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();
}
Questo è il motivo per cui sono in grado di utilizzare, ad esempio:
@FieldMap Map<String, String> params
di passare i miei parametri lì, perché @FieldMap richiede @FormUrlEncoded, mentre io sono in grado di fare richiesta @Body con @FormUrlEncoded .
1) Come rimuovere% 3F dalla mia stringa URL? (al di fuori del retrofit è tutto a posto!)
2) C'è un modo semplice per inviare un'immagine?
UPD: <-403 Forbidden https://api.example.com/api/v2/user/5984/validate_password quando uso annotazione @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
);
Tutto funziona quando lo uso così:
voglio sia per rimuovere% 3F o imparare come utilizzare Field nella richiesta POST senza ottenere FORBIDDEN
ho ancora vuoi sbarazzarti di questo% 3F e mettere un punto interrogativo. Qualche idea? –
È anche possibile visualizzare questo https://square.github.io/retrofit/2.x/retrofit/index.html?retrofit2/http/QueryMap.html – Mehdi