제이슨의 개발이야기
Edit text 글자 입력 시 검색 페이지 개발 with 알고리아서치 API(Algoria Search Api) 본문
안녕하세요 저번에 알고리아 서치에 대해서 간단하게 공부 했었는대 요번에는 살짝 응용해서
EditText창에 글자가 입력될때 마다 알고리아(Algoria) Api 를 이용해서 검색 결과를 가저 오는 것에 대해서 블로그 작성해보려구 합니다!
참고로 알고리아 에 데이터가 세팅 되어있어야 하고 데이터 세팅 부분은
https://jason-api.tistory.com/39?category=1183589
해당 링크에 들어가서 index.addObjectAsync{ 데이터를 추가하는 부분을 봐주세요
요번 프로젝트에서 가장 핵심은 글자가 입력될때 검색이 되어야 하고 그 글자가 입력될때 마다 그것을 감지 해야 합니다!
EditText에 글자를 감지하는 리스너가 필요한대 그 리스너는 editText.addTextChangedListener를 달아주면됩니다!
editText.addTextChangedListener(object : TextWatcher{
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?,start: Int, count: Int, after: Int) {
}
override fun onTextChanged(str: CharSequence?, start: Int, before: Int, count: Int) {
index.searchAsync(Query(str),handler)
}
})
위에 처럼 리스너를 달아주고 onTextChanged 메소드를 오버라이딩 해줍니다
index.searchAsync(Query(str),handler) 를 호출하면 검색이 됩니다!
Query(str)에서 str은 사용자가 입력한 글자 이고 handler 는 검색 결과를 처리하는 핸들러입니다
핸들러 코드는 아래와 같습니다!
var handler = CompletionHandler{content , error ->
println(content)
var list = ArrayList<Apt>()
var jsonArray = content?.getJSONArray("hits")
if (jsonArray != null) {
for(i in 1 until jsonArray.length()) {
var json = jsonArray?.getJSONObject(i)
var apt = Apt(json.getString("aptName"),json.getString("doroJuso"))
list.add(apt)
}
adapter.list = list
adapter.resetting()
}
}
var jsonArray = content?.getJSONArray("hits")
에서 JSONArray인 이유는 검색 결과가 보통 여러개인 경우가 많으므로 반환은 배열로 받는 경우가 대부분입니다
그래서 JSONArray이고
getJSONArray("hits") 에서 "hits" 는 보내여지는 JSON의 이름입니다 저 같은 경우 hits인대 다른 분들은 다른 이름일 수 있으니 거기에 맞는 이름을 hits 대신 기입해주세요
그리고 for문을 통해 각 데이터를 리사이클러뷰 데이터 에 넣고 resetting() 메소드를 실행합니다 (resetting 메소드는 제가 만든 메소드 이고 안에서는 notifyDataSetChanged() 가 호출됩니다)
for문 안에 보면 getString("aptName")이 있는대 이것은 데이터 필드 명입니다 저 같은 경우 아파트 데이터 라서 아파트 이름을 저장하고 있는 필드명이 aptName 이기 때문에 aptName을 기입했습니다 이거 역시 각자가 맞는 필드명을 넣어주세요
이렇게 가장 핵심 부분 코드에 대해서 빠르게 설명 했습니다!
혹시 리사이클러뷰 부분에 어댑터 코드 라든가 엑티비티 코드가 궁금하시면 밑에 제 깃헙에서 참고해주세요 ㅎㅎ
참고로 알고리아 api key 랑 id를 코드 상에서 지워서 프로젝트 실행은 안됩니다!
https://github.com/jaeilssss/algoriaSearchProject
'안드로이드' 카테고리의 다른 글
Firebase RemoteConfig 이용해보기! Android with Coroutin , viewPager2 이용 (1) | 2021.06.03 |
---|---|
FCM 푸시메시지 보낼때 안드로이드 화면 깨우기 Kotlin (0) | 2021.05.28 |
Firebase CloudFunction 을 이용한 FCM 을 이용한 푸시(push) 메시지 받기 && 보내기 (0) | 2021.05.27 |
[안드로이드] 축복 터지는 타이머(Timer) 만들기 Sound Pool ,seekBar, CountDownTimer,Lottie Animation (0) | 2021.05.11 |
Lottie 라이브러리 활용한 안드로이드 Lottie 애니메이션 적용하기 ! 로딩화면 구현 , 버튼 눌렀을때 애니메이션 (0) | 2021.05.03 |