티스토리 뷰
KaKao REST API 를 통해서 검색기능을 만들 일이 생겼다.
Retrofit을 사용하여 REST API를 사용해보자.
model을 만드는 것은 생략한다.
우선 Retrofit 객체를 만든다.
baseUrl에 https://dapi.kakao.com/ 가 들어가야한다.
private fun retrofitInterface(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://dapi.kakao.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.client(httpClient.build())
.build()
}
다음으로 interface를 구성하려고 한다.
내가 필요한 부분은 keyword로 검색이었고, json의 형태로 결과를 받아오기를 원했기 때문에
@GET("v2/local/search/keyword.json") 을 추가해주었다.
문제는 Header에 Authorization을 추가해주어야하는데
@Headers()에 키를 그대로 입력했더니 HTTP 401 Error가 나왔다.
찾아보다 혹시나하는 마음에
@Headers("Authorization: KakaoAK XXXXXXXXXXXXXXX")
의 형태로 입력했더니 인증이 정상적으로 진행되었다.
쿼리로 보낼 것은 keyword만 필요했기 때문에 "query"를 통해 keyword를 전달하였고, x좌표나 y좌표, 반경 거리 등을 쿼리로 보낼 수 있는듯하다.
결론적으로 interface안에는 아래와 같은 코드가 들어가게 된다.
@Headers("Authorization: KakaoAK " + RestAPIKey.kakao)
@GET("v2/local/search/keyword.json")
fun keywordSearch(@Query("query") keyword: String) : Observable
이제 Retrofit을 이용해서 MainActivity에서 REST API를 호출하기 위해 함수를 작성하였다.
private fun getKeywordSearch(keyword: String) {
subscription = SearchService.restAPI().keywordSearch(keyword)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ result ->
Log.d("keywordResult", result.documents[0].place_name)
},
{ err ->
Log.e("Error User",err.toString())
}
)
}
EditText에 TextWatcher를 붙여 텍스트가 변할 때 마다 getKeywordSearch 함수를 호출하여 검색기능을 완성하였다.
'Android' 카테고리의 다른 글
Inconsistency detected 에러에 대한 의심.. (0) | 2020.01.11 |
---|---|
Single 과 Observable의 차이 (0) | 2019.12.29 |
네이버 아이디 로그인 API를 사용해보자 (1) | 2018.08.08 |
기상청에서 제공하는 Json 파일로 지역코드와 지역명 파싱하기 (0) | 2018.05.19 |
다음 지도 API 기본 설정 (0) | 2018.04.23 |
댓글