Tôi đã sử dụng Retrofit trong một thời gian dài nhưng sau bản cập nhật lớn này, nó hơi khó chút :) Vấn đề của tôi là tôi cần gửi yêu cầu đăng bài dưới dạng formUrlEncoded trong base64 được mã hóa hình ảnh.Retrofit2 Đăng ảnh dưới dạng base64
Nếu không có hình ảnh, các yêu cầu dưới đây chỉ hoạt động tốt
@FormUrlEncoded
@POST("mypath")
Call<BooleanResponse> updateUser(@FieldMap HashMap<String, String> updatedValues);
Nhưng khi tôi đã cố gắng để bao gồm hình ảnh, Base64 mã hóa cũng sau đó tôi nhận được Internal Server Error -which tôi biết nó không phải là về phía máy chủ, vì tôi có một ứng dụng khác gọi dịch vụ này bằng HttpPost và hoạt động tốt.
Đây là cách tôi lấy dữ liệu base64 từ hình ảnh và tôi thêm dữ liệu này vào bản đồ mà tôi cũng sẽ chuyển sang yêu cầu updateUser, nhưng điều đó không hoạt động.
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);
}
Khi tôi tìm kiếm, tôi thấy rằng Retrofit sử dụng một số serializations theo yêu cầu qua Gson trừ khi tôi yêu cầu không làm như vậy! As in this question
Nhưng tôi không thể tìm ra cách đặt nó như trong Retrofit2, bất kỳ đề xuất nào?
Bạn có muốn đăng Base64 làm trường/tham số biểu mẫu không? hoặc trong thân thể? –
dưới dạng tham số biểu mẫu @ VaibhavA.Jani – yahya
Sự cố có thể là "Chuỗi Base64" của bạn sẽ được UrlEncoded thử giải mã nó ở cuối máy chủ. HOẶC gói gọn nó trong "POJO (đối tượng java thuần túy)" để nó sẽ được gửi dưới dạng trường Json trong đối tượng Json và sẽ được tuần tự hóa đúng cách. TypedString bị xóa khỏi Retrofit2! –