-
팀 프로젝트 트러블 슈팅 - suspend fun, viewModelScope.launchAndroid 2024. 5. 10. 21:42
로그캣 오류 코드
java.lang.IllegalArgumentException: Unable to create call adapter for class com.example.ssg_tube.data.model.SearchResponse for method YouTubeAPI.videoSearch
문제사항 및 코드
videoSearch 의 요청 값으로 response data를 불러오지 못한다.
@GET("search") suspend fun videoSearch( // 필수 매개변수 @Query("part") part: String, // part 매개변수는 API 응답이 포함하는 search 리소스 속성 하나 이상의 쉼표로 구분된 목록을 지정합니다. 매개변수 값을 snippet로 설정합니다. // 선택 매개변수 @Query("q") query: String, // 검색어 ... ): SearchResponse fun videoResults(query: String) { // videoSearch 를 불러오기 위해선 suspend 를 사용해야 한다. resItems.clear() viewModelScope.launch { // 코루틴을 사용하여 비동기적으로 실행 // videModelScope는 fragment 가 파괴 될 때 중단되어 메모리 누수가 방지됨 val requestResponse = apiService.videoSearch( // 비동기적으로 실행되기 때 part = "snippet", query = query, maxResults = 5, order = "relevance", type = "video", videoType = "any" ) val items = requestResponse.items for (item in items) { val thumbnail = item.snippet.thumbnails["default"]!!.url val title = item.snippet.title resItems.add(SearchItemModel(title = title, url = thumbnail)) } searchResult() } }
해결 과정
기존에 코드가 fun videoSearch 로 되어있었는데 suspend fun 으로 바꿔주고 뷰모델에서 데이터를 불러오기위해 viewModelScope.launch 를 사용해주었다.
정리
suspend 를 쓰고나서는 뷰모델의 값을 가져오는 쪽에서 쓰레드로 비동기적인 실행이 가능하도록 해야한다.
'Android' 카테고리의 다른 글
팀플 금연테스트 화면 - ViewPager2 (0) 2024.05.31 팀 프로젝트 트러블 슈팅 - viewmodel scope 의 범위 (0) 2024.05.11 개인 과제 트러블 슈팅 - 인터페이스 변수 초기화 (0) 2024.05.09 개인 과제 트러블 슈팅 - filter (0) 2024.05.08 개인 과제 트러블 슈팅 - 프래그먼트 트랜잭션 (0) 2024.05.07