Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- progressbar
- ayncAfter
- Android
- Alamofire
- MemoList
- RecyclerView
- SplashFragment
- RxJava
- viewpager2
- CSS
- web
- CalendarView
- imagepicker
- Dropdown
- HTML
- DispatchTouchEvent
- InAppPurchase
- MotionEvent
- SWIFT
- aab
- javascript
- IOS
- 스터디
- UIPickerView
- Kotlin
- 실행지연
- retrofit2
- ViewModel
- dispatchQueue
- 개발
Archives
- Today
- Total
멜팅비의 개발 공부
[Android/Kotlin] retrofit2 사용 시 Response가 XML인 경우 Convert 하는 방법 본문
개발 공부/[Android 개발]
[Android/Kotlin] retrofit2 사용 시 Response가 XML인 경우 Convert 하는 방법
멜팅비 2021. 9. 9. 23:14반응형
요즘 안드로이드 사이드 프로젝트를 개인적으로 진행하고 있다.
현재 진행 중인 사이드 프로젝트에서 공공 데이터 API를 활용하여 데이터를 처리하는 기능이 있는데,
공공 데이터 API에서 지원하는 Response가 xml형태로 내려와서 xml로 내려온 결과를 변환하는 작업에 대한 내용을 정리하려고 한다.
XML Parser 라이브러리 종속성 추가
//xml parser
implementation 'com.tickaroo.tikxml:annotation:0.8.13'
implementation 'com.tickaroo.tikxml:core:0.8.13'
implementation 'com.tickaroo.tikxml:retrofit-converter:0.8.13'
kapt 'com.tickaroo.tikxml:processor:0.8.13'
Retrofit Instance 생성 시 Converter등록
fun getRetrofitBuild(client: OkHttpClient) = Retrofit.Builder().run {
baseUrl(BASE_URL)
client(client)
addCallAdapterFactory(RxJava2CallAdapterFactory.create())
// addConverterFactory(GsonConverterFactory.create(gson))
addConverterFactory(TikXmlConverterFactory.create(TikXml.Builder().exceptionOnUnreadXml(false).build()))
build()
}
GsonConverterFactory.create() 대신 TikXmlConverterFactory.create(TikXml.Builder().exceptionOnUnreadXml(false).build())) 추가해 준다.
TikXml.Builder().exceptionOnUnreadXml(false).build()은 필요 없는 항목의 데이터를 제외하고 받고 싶을 때 사용한다.
결괏값 xml에 따른 dataClass 작성
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<numOfRows>3</numOfRows>
<pageNo>1</pageNo>
<totalCount>1</totalCount>
<items>
<item>
<ITEM_SEQ>200402488</ITEM_SEQ>
<ITEM_NAME>알레기살정10밀리그람(페미로라스트칼륨)</ITEM_NAME>
... 생략
이러한 형식으로 내려올 경우
@Xml(name = "response")
data class PillInfo(
@Element
val header: Header,
@Element
val body: Body,
)
@Xml(name = "header")
data class Header(
@PropertyElement
val resultCode: Int,
@PropertyElement
val resultMsg: String,
)
...
생략
@Xml
data class Item(
@PropertyElement(name = "ITEM_SEQ") var itemSeq: String?,
@PropertyElement(name = "ITEM_NAME") var itemName: String?,
... 생략
)
어노테이션을 사용하여 data class를 생성하면 된다.
공공 데이터 API의 경우
공공 데이터 포털에서 사용하고 싶은 데이터를 검색 후
오픈 API에서 사용할 API를 선택하면 된다.
API 문서를 파일로 받을 수 있으며, 활용 신청이 필요한 경우 활용 신청 후 서비스 키를 발급받아서 사용하면 된다.
반응형
'개발 공부 > [Android 개발]' 카테고리의 다른 글
[Android/Kotlin] 안드로이드 인앱 결제(구독상품) 구현 정리 (3) | 2021.09.15 |
---|---|
[Android/Kotlin] 유용한 Custom Calendar Library 소개 (0) | 2021.09.09 |
[Android] RxJava2 관련 스터디 (0) | 2021.08.10 |
[Android-Kotlin] FullScreen DialogFragment 구현하기(Progress Dialog) (0) | 2021.04.06 |
[Android-Kotlin] 코틀린 Collection 함수 (0) | 2021.04.03 |
Comments