제이슨의 개발이야기

Edit text 글자 입력 시 검색 페이지 개발 with 알고리아서치 API(Algoria Search Api) 본문

안드로이드

Edit text 글자 입력 시 검색 페이지 개발 with 알고리아서치 API(Algoria Search Api)

제이쓰은 2021. 5. 28. 14:23
728x90
반응형

안녕하세요 저번에 알고리아 서치에 대해서 간단하게 공부 했었는대 요번에는 살짝 응용해서 

EditText창에 글자가 입력될때 마다 알고리아(Algoria) Api 를 이용해서 검색 결과를 가저 오는 것에 대해서 블로그 작성해보려구 합니다! 

 

참고로 알고리아 에 데이터가 세팅 되어있어야 하고 데이터 세팅 부분은 

https://jason-api.tistory.com/39?category=1183589 

 

제이쓴

안드로이드 코딩테스트 컴퓨터과학

jason-api.tistory.com

해당 링크에 들어가서 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

 

jaeilssss/algoriaSearchProject

알고리아 서치 프로젝트. Contribute to jaeilssss/algoriaSearchProject development by creating an account on GitHub.

github.com

 

728x90
반응형