기존에 만들어 두었던 작품 검색 기능에서는 입력된 text를 감지하여 text가 변화하였을 시 요청을 날리도록 구현 하였었다.
해당 부분에서 두 가지 정도의 문제점을 발견 하였는데 결론적으로는 하나의 원인이 해당 문제점을 만들었다.
기존의 코드
search.addTextChangedListener {
val query: String = search.text.toString()
params["query"] = query
TokenRetrofitManager.getInstance(applicationContext).search(params) { response ->
if (response.isSuccessful) {
val searchResponse = response.body()?.data?.results // 응답 받은 데이터
searchResponse?.let {
adapter.setList(it) // 응답 받은 데이터 searchList 업데이트
}
Log.d("testt",""+ searchResponse)
} else {
}
}
}
문제점
쓸데 없는 요청
첫 번째 문제점은 text의 변화를 감지하여 그때 그때 요청을 계속해서 보내기 때문에 아무 의미를 가지지 않은 글자의 경우에도 일단은 텍스트의 변화가 감지 되어도 요청을 보내게 된다. ex) ㄱ. , ㄱ.. , 가ㅈ. 등
의미 없는 요청
위에 상황과 똑같은 상황이기는 하나 위에 상황의 경우에는 특정 단어를 만들기 위해서 중간에 의미없는 글자를 만드는 경우이고 해당 경우의 경우에는 그저 의미 없는 글자를 만드는 경우이다. ex) 같ㅌㅌㅌㅌㅌ, 와 같은 글자를 그저 의미없이 썼다 지웠다 하는 그러한 경우
즉 텍스트의 변화만을 감지하여 변화가 있을시에는 어떤 상황이던 무조건 적으로 요청을 보내기에 쓸데없는 요청을 보내는일이 많아진 것이다.
해결
그래서 내놓은 해결 방안은 간단하게 텍스트를 입력 받고 일정 시간이 지나도 다른 입력이 없다면 그때서야 요청을 변하는 방식으로 변경을 하였다.
private var searchJob: Job? = null // 전역변수
//search라는 EditText의 id
// 텍스트의 변화를 감지하여 2초동안 아무런 입력이 없을시 요청을 진행한다.
search.addTextChangedListener {
val query: String = it.toString()
searchJob?.cancel()
searchJob = lifecycleScope.launch {
delay(2000) //해당 시간동안 입력이 없다면 아래의 코드를 실행
params["query"] = query
Log.d("testt", "query: " + query)
TokenRetrofitManager.getInstance(applicationContext).search(params) { response ->
if (response.isSuccessful) {
val searchResponse =
response.body()?.data?.results // 서버 응답에서 받은 데이터
searchResponse?.let {
adapter.setList(it) // 서버 응답에서 받은 데이터를 이용하여 searchList 업데이트
}
Log.d("testt", "" + searchResponse)
} else {
Log.d("testt", "작품 검색 요청 실패")
}
}
}
}'TeamProject > ImadAndroid' 카테고리의 다른 글
| DialogFragment 등장 퇴장 애니메이션 적용 [Kotlin] (0) | 2024.12.24 |
|---|---|
| 안드로이드 팝업 메뉴에 이미지 추가 [Kotlin] (2) | 2024.12.20 |
| 이미지가 가로로 로드 되는 경우 (0) | 2024.08.09 |
| Fragment에서 menuInflater 사용 (0) | 2024.07.04 |
| 리사이클러뷰 스크롤시 페이지 요청 (0) | 2024.04.24 |
댓글