uso Retrofit da molto tempo ma dopo questo enorme aggiornamento, è stato un po 'difficile :) Il mio problema è che ho bisogno di inviare una richiesta di posta come formUrlEncoded all'interno di un'immagine codificata base64.Retrofit2 Invia immagine come base64
senza immagine, la richiesta di seguito funziona bene
@FormUrlEncoded
@POST("mypath")
Call<BooleanResponse> updateUser(@FieldMap HashMap<String, String> updatedValues);
Ma quando ho cercato di includere un'immagine, Base64 codificato e quindi ottengo Internal Server Error -che so che non si tratta di lato server perché io avere un'altra applicazione che chiama questo servizio con HttpPost e che funziona bene.
Ecco come ottengo i dati di base64 dall'immagine e aggiungo questo nella mappa che passerò anche alla richiesta di updateUser, ma non funziona.
public static String getProfileImage(ImageView imageView) {
imageView.buildDrawingCache();
Bitmap bm = imageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 40, baos);
byte[] b = baos.toByteArray();
return Base64.encodeToString(b, Base64.DEFAULT);
}
Come ho cercato, ho trovato che Retrofit uso di alcune serializzazioni su richiesta, tramite GSON a meno che io dico di non farlo! As in this question
Ma non riuscivo a capire come metterlo come in Retrofit2, qualche suggerimento?
Vuoi pubblicare Base64 come campo modulo/parametro? o nel corpo? –
come parametro di forma @ VaibhavA.Jani – yahya
Il problema potrebbe essere la tua "Base64 String" sarà UrlEncoded provare a decodificarlo a fine server. O incapsulare in "POJO (plain java object)" in modo che venga inviato come campo Json all'interno dell'oggetto Json e venga serializzato correttamente. TypedString viene rimosso da Retrofit2! –