Я давно пользуюсь Retrofit, но после этого огромного обновления это было немного сложно :) Моя проблема в том, что мне нужно отправить запрос на отправку как formUrlEncoded в кодировке с изображениями base64.Retrofit2 Post image as base64
Без изображения, ниже запрос работает нормально
@FormUrlEncoded
@POST("mypath")
Call<BooleanResponse> updateUser(@FieldMap HashMap<String, String> updatedValues);
Но когда я попытался включить изображение, в кодировке Base64, а затем я получаю внутреннюю ошибку сервера -Какой я знаю, что это не о стороне сервера, потому что я иметь другое приложение, вызывающее эту службу с HttpPost, и это работает отлично.
Вот как я получаю данные base64 от изображения, и я добавляю это в карту, чтобы перейти к запросу updateUser, но это просто не работает.
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);
}
Как я искал, я нашел, что дооснащения использовать некоторые сериализации по запросу через Gson, если я не скажу это не делать этого! As in this question
Но я не мог понять, как сказать, как в Retrofit2, любые предложения?
Вы хотите разместить Base64 в качестве поля формы/параметра? или в теле? –
как форма параметр @ VaibhavA.Jani – yahya
Проблема может быть вашей "Base64 String" будет UrlEncoded попробовать декодировать его на сервере. ИЛИ инкапсулируйте его в «POJO (простой Java-объект)», поэтому он будет отправлен как поле Json внутри объекта Json и будет правильно сериализован. TypedString удаляется из Retrofit2! –