Geocoder getFromLocation 에러
1758
投稿した質問数 2
현재 레슨 위치 가져오기 - 메인 액티비티 지오코딩 (1) 에서
geoCoder.getFromLocation(latitude,longitude,7 )를 그대로 사용하는데 에러가 뜹니다.

이 형식은 deprecated 됐다고 하고
getFromLocation(latitude: Double, longitude: Double, maxResults: Int, listener: Geocoder.GeocodeListener)
이걸 써야한다는데 GeocodeListener 를 어떻게 써야할지 감이 안옵니다. 구글에서도 찾기가 힘드네요.
어떤식으로 Geocodelistener 를 써야 할까요
回答 2
0
안녕하세요! 조이스입니다.
질문 주신 내용을 보면, 현재 버전이 변경되어 deprecated 된 함수를 사용하다가 나는 에러로 보이는데요, 말씀해주신 것처럼 GeocodeListener 를 구현해주시면 됩니다.
GeocodeListener 인터페이스는 onGeocode 함수를 구현해주면 됩니다. Geocode가 오는 것을 기다리고 있다가, Geocode를 받으면 onGeocode 함수를 실행하는 것이지요.
val geocodeListener = @RequiresApi(33) object : Geocoder.GeocodeListener {
override fun onGeocode(addresses: MutableList<Address>) {
// 주소 리스트를 가지고 할 것을 적어주면 됩니다.
}
}혹은, 람다식을 사용하여 아래와 같이 적어주어도 됩니다.
val geocodeListener = Geocoder.GeocodeListener { addresses ->
// 주소 리스트를 가지고 할 것을 적어주면 됩니다.
}
자 그럼 MainActivity.kt 의 updateUI 함수의 수정된 전체 코드를 봐볼까요?
private fun updateUI() {
locationProvider = LocationProvider(this@MainActivity)
//위도와 경도 정보를 가져옵니다.
if (latitude == 0.0 || longitude == 0.0) {
latitude = locationProvider.getLocationLatitude()
longitude = locationProvider.getLocationLongitude()
}
if (latitude != 0.0 || longitude != 0.0) {
// [[[[[[[[[[[[[ 수정된 코드 시작]]]]]]]]]]]]]]]]]
//1. 현재 위치를 가져오고 UI 업데이트
//현재 위치를 가져오기
if (Build.VERSION.SDK_INT < 33) { // SDK 버전이 33보다 큰 경우에만 아래 함수를 씁니다.
val address = getCurrentAddress(latitude, longitude) //주소가 null 이 아닐 경우 UI 업데이트
address?.let {
binding.tvLocationTitle.text = "${it.thoroughfare}" // 예시: 역삼 1동
binding.tvLocationSubtitle.text =
"${it.countryName} ${it.adminArea}" // 예시 : 대한민국 서울특별시
}
}else { // SDK 버전이 33보다 크거나 같은 경우
val geocoder = Geocoder(this, Locale.getDefault())
var address: Address? = null
val geocodeListener = @RequiresApi(33) object : Geocoder.GeocodeListener {
override fun onGeocode(addresses: MutableList<Address>) {
// 주소 리스트를 가지고 할 것을 적어주면 됩니다.
address = addresses[0];
address?.let {
binding.tvLocationTitle.text = "${it.thoroughfare}" // 예시: 역삼 1동
binding.tvLocationSubtitle.text =
"${it.countryName} ${it.adminArea}" // 예시 : 대한민국 서울특별시
}
}
override fun onError(errorMessage: String?) {
address = null
Toast.makeText(this@MainActivity, "주소가 발견되지 않았습니다.", Toast.LENGTH_LONG).show()
}
}
geocoder.getFromLocation(latitude, longitude, 7, geocodeListener)
}
// [[[[[[[[[[[[[ 수정된 코드 끝]]]]]]]]]]]]]]]]]
//2. 현재 미세먼지 농도 가져오고 UI 업데이트
getAirQualityData(latitude, longitude)
} else {
Toast.makeText(
this@MainActivity, "위도, 경도 정보를 가져올 수 없었습니다. 새로고침을 눌러주세요.", Toast.LENGTH_LONG
).show()
}
}
위 코드의 수정된 부분을 보면 SDK 가 33 이상인 경우 GeocodeListener 를 먼저 구현해준 후 getFromLocation 함수를 실행해줍니다. 33 미만인 경우에는 기존 코드를 그대로 적어주면 됩니다.
열심히 수업을 들어주셔서 진심으로 감사드립니다 :)
추가적인 질문 있으시면 남겨주세요!
안드로이드스튜디오 버전이 어떻게 되는지요?
0
106
1
스크래치 파일 Run 안되는 오류 발생
0
134
1
Git에서 다운받은 폴더가 안열리는 분들
0
136
1
TodoDao Interface 문의
0
78
1
kotlin 버전과 ksp 버전 꼭 맞추셔야 해요!!
0
446
1
아름다운 joyce님께.. runonuithread 문의
0
139
0
viewBinding 관련 질문입니다.
0
206
3
0:30초 질문입니다.
0
179
1
Locationmanager로 타입캐스팅 실패 문의
0
140
1
Todo리스트 dao 구성 시 todo 질문
0
140
1
룸 데이터베이스 구성 시 dao 에러 문의
0
170
1
버튼모양 질문 소스코드 첨부
0
146
1
레이아웃 구성할떄 저는 버튼모양이 원으로 나와요
0
169
1
싱글톤 패턴 구현중 코드가 강의와 일치하지 않습니다.
0
156
1
MainActivity 파일안에 setContencView가 없습니다..
0
201
1
room database 설치 질문
0
174
1
kts로 공부하는 학생도 있는데 갑자기 설명도 없이 kt로 설명하면..
0
313
3
mutable과 var의 차이점
0
201
1
안드로이드 스튜디오 스크래치 파일
0
277
1
추가링크는 어디에 있을까요?
0
285
1
대시보드 설정 마지막 단계 Google Play에 앱 게시
0
675
2
geoCoder.getFromLocation 에러
0
551
2
apirequest.io 로딩 현상 & 사이트 이상함
0
449
1
PrimaryKey를 Nullable하게 만드는 이유
0
267
1

