안드로이드 Retrofit 데이터 타입 문제
Closed this issue · 3 comments
- 이미지 API 반환 값 처리
- String 전송 문제
- Date() 타입 문제
다음의 3가지 Retrofit 데이터 타입 이슈가 발생했습니다.
이미지 API 반환 값 처리
Failed GetAllGroup API call with call: retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall@86733cd + exception: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 177 path $[0].profile
서버에서는 이미지를 BytesArray로 반환하지만, json을 사용할 경우 Bytes를 나타낼 방법이 없기 때문에 String으로 변환되어 전송이 됩니다. 따라서 안드로이드에서 Retrofit을 사용하여 BytesArray를 받을 경울 String을 BytesArray로 변경하는 과정이 필요합니다.
따라서 안드로이드에서 서버로 BytesArray를 전송할 때는 Bitmap을 ByteArrayOutputStream으로 변경하고 이를 toByteArray()으로 ByteArray로 변경하여 전송해야합니다.
또한 서버에서 안드로이드로 BytesArray를 받을 때는 이미지 배열을 String으로 받고, 이를 Base64.decode()와 BitmapFactory.decodeByteArray으로 Bitmap을 얻어 사용합니다.
byte[] decodedImageBytes = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedImageBytes, 0, decodedImageBytes.length);
참고 자료
- github issue: retrofit not get byte array
관련 Pull Request
String 전송 문제
안드로이드에서 서버로 이메일을 전송할 때 텍스트에 따옴표(””)가 자동으로 함께 저장되어 데이터 구조에 오류가 발생했습니다. 기본 설정이 json으로 되어 있어서 전송 시 “”를 제거하는 text plain으로 변경해야 합니다. 따라서 RequestBody 클래스를 사용하여 String 타입을 text/plain으로 변경하여 사용했습니다.
`String text = "plain text request body";
RequestBody body =
RequestBody.create(MediaType.parse("text/plain"), text);
Call call = service.getStringRequestBody(body);
Response response = call.execute();
String value = response.body().string();`
참고 자료