안드로이드 앱 개발기 #13 - Retrofit2 활용 서버로부터 받을 데이터 유형 JsonElement (JSONObject 사용 불가)
Retrofit2 활용하여 서버로부터 받을 JSON 자료의 유형은 데이터 클래스로 정의할 수 있습니다. 그런데 클래스를 정의하지 않고도 JsonElement 클래스를 활용해도 됩니다.
클래스 정의 대신 JsonElement 클래스 사용이 나은 경우
서버로부터 받을 JSON 자료의 구조가 복잡한 반면, 앱은 그것의 일부분만 사용하면 되는 경우가 있습니다. 이 경우에 데이터 클래스를 정의하는 것보다 JsonElement 클래스를 사용하는 것이 더 나을 수 있습니다.
주의 - JSONObject 클래스는 사용 불가
OkHttp 또는 Volley 라이브러리로 서버 연동 했을 때에는 받을 자료의 유형을 JSONObject 클래스로 정할 수 있었습니다. 그래서 Retrofit2로도 그게 가능할 거라고 당연히 가정했었습니다. 서버 연동 구현 후 문제는... 서버 연결은 문제가 없는데 받은 자료는 비어 있었다는 것입니다. 처음에는 URL이 잘못된줄 알았습니다. 분석해보니 URL 문제는 아니었구요. JSONObject는 사용 불가, JsonElement를 사용해야 합니다. 이거 찾느라 2~3시간을 보내야 했습니다.
(이 내용이 이번 포스트를 작성한 가장 큰 이유입니다.)
JSONObject와는 다른 JsonElement 사용법
JsonElement 객체로부터 자료를 읽는 방법은 JSONObject와 다릅니다. 차이점을 간략히 정리해 봅니다.
자료 접근 | JSONObject | JsonElement |
---|---|---|
문자열 읽기 | getString(memberName) | get(memberName).asString |
Boolean 값 읽기 | getBoolean(memberName) | get(memberName).asBoolean |
Int 정수 읽기 | getInt(memberName) | get(memberName).asString |
Long 정수 읽기 | getLong(memberName) | get(memberName).asLong |
Float 실수 읽기 | getFloat(memberName) | get(memberName).asFloat |
Double 실수 읽기 | getDouble(memberName) | get(memberName).asDouble |
JSON 객체 읽기 | getJSONObject(memberName) | get(memberName).asJsonObject |
JSON 배열 읽기 | getJSONArray(memberName) | get(memberName).asJsonArray |
참고 링크
지난 안드로이드 앱 개발기
- #12 - Glide 활용하여 이미지 다운로드 받는 코드
- #11 - 처리할 수 없는 예외/크래쉬 발생시 앱 재시작하기
- #10 - 안드로이드 스튜디오 업그레이드 후 단축키가 안되면? (맥북)
- #9 - LiveData 객체에 동일 데이터 설정하면 observer 실행되는지 확인 목적의 샘플 프로젝트
- #8 - 안드로이드 스튜디오에서 빌드시 발생하는 Build Tools revision 31.0.0 오류
- #7 - 'UGC(사용자 생성 콘텐츠) 정책 미준수'로 심사 거절
- #6 - 뷰에 역마진 적용 불가시 translationX, translationY 속성 사용하기
- #5 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #4 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #3 - 무한 롤링 배너 만드는 법을 찾았으나, 높이를 wrap_content로 지정이 안 먹히는 문제점이...
- #2 - setContentView 메소드의 파라메터를 변경하지 않아서 발생한 화면 오류
- #1 - 페이스북 로그인 연동시 발생했던 문제들
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.