Używam Retrofit przez długi czas, ale po tej wielkiej aktualizacji, to było trochę trudne :) Moim problemem jest wysłanie żądania postu jako formUrlEncoded w kodowanym base64.Retrofit2 Post image as base64
Bez obrazu, poniżej wniosek działa dobrze
@FormUrlEncoded
@POST("mypath")
Call<BooleanResponse> updateUser(@FieldMap HashMap<String, String> updatedValues);
Ale kiedy próbowałem to obraz zakodowany Base64 także wtedy ja dostać Internal Server Error-co wiem to nie chodzi o to, bo po stronie serwera mieć inną aplikację wywołującą tę usługę za pomocą HttpPost i działa dobrze.
W ten sposób otrzymuję dane base64 z obrazu i dodaję to do mapy, która również przejdzie do żądania updateUser, ale to po prostu nie działa.
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);
}
Jak szukałem, znalazłem, że Retrofit korzystać z niektórych serializations na żądanie poprzez Gson chyba powiem jej tego nie robić! As in this question
Ale nie mogłem wymyślić, jak umieścić go w Retrofit2, jakieś sugestie?
Czy chcesz opublikować Base64 jako pole/parametr formularza? lub w ciele? –
jako parametr formularza @ VaibhavA.Jani – yahya
Problem może być twój "String Base64" będzie UrlEncoded spróbuj dekodować go na końcu serwera. LUB enkapsuluj go w "POJO (zwykły obiekt java)", więc zostanie wysłany jako pole Json w obiekcie Json i zostanie poprawnie zserializowany. TypedString został usunięty z Retrofit2! –