GeoCoder를 사용하여 주소를 가져오는 코드가 있었는데
갑자기 에러가 발생하였다.
java.io.IOException: grpc failed
잘 되던 GeoCoder에서 갑자기 에러가 발생하니 난감했지만
검색을 해보니 꽤나 간헐적으로 발생하는 에러인 거 같다.
해당 에러에 대한 글이 꽤 많았다.
역시 갓오버플로우
결론은 주소를 얻어오는 과정이 생각보다 시간이 걸리는 작업이라
Main 스레드가 아닌 다른 스레드에서 처리를 해야한다는 것이다.
결국엔 Thread를 쓰던 Coroutine을 쓰던 비동기로 처리를 해야한다.
필자는 Thread를 사용하여 해결하였다.
Thread {
val address = Geocoder(this@MainActivity).getFromLocation(it.latitude, it.longitude, 1)[0].getAddressLine(0).toString()
val addressList = address.split(" ")
for(idx in 1 until addressList.size) {
builder.append("${addressList[idx]} ")
}
viewModel.location.postValue(builder.toString())
}.start()
비동기 처리를 추가하고 정상작동하는 것까지 확인했는데
일주일 뒤인 오늘 다시 실행해보니 또 에러가 났다.
제발
다시 알아보니 에뮬레이터는 AVD 매니저에서 Wipe Data를 해주는 것도 방법이라고 한다.
그리고 스택오버플로우에서 본 댓글 중에
에뮬레이터에선 잘 안될 수 있으니 가급적 실제 단말기에서 테스트해보라는 댓글이
꽤나 많았다.
확실히 에뮬레이터에선 간혹 터지던 이 에러가
실제 단말기에선 한번도 터지지 않았다.
에뮬레이터가 편한데 쩝
이번 에러 덕분에 에뮬레이터론 테스트에 한계가 있다는 것을 알게되었다 ..
개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.