inflearn logo
강의

講義

知識共有

[2023コトリン講義無料提供]基礎から収益創出まで、AndroidプログラミングA-Z

Geocoder getFromLocation 에러

1758

Jay Kim

投稿した質問数 2

0

현재 레슨 위치 가져오기 - 메인 액티비티 지오코딩 (1) 에서

geoCoder.getFromLocation(latitude,longitude,7 )

를 그대로 사용하는데 에러가 뜹니다.

이 형식은 deprecated 됐다고 하고

getFromLocation(latitude: Double, longitude: Double, maxResults: Int, listener: Geocoder.GeocodeListener)

 

이걸 써야한다는데 GeocodeListener 를 어떻게 써야할지 감이 안옵니다. 구글에서도 찾기가 힘드네요.

어떤식으로 Geocodelistener 를 써야 할까요

 

 

 

android kotlin 클론코딩

回答 2

0

kur11077380

getCurrentAddress 함수에있는내용같은데
updateUI 말고

getCurrentAddress 내용을 볼수있을가요?

0

Code With Joyce

안녕하세요! 조이스입니다.

 

질문 주신 내용을 보면, 현재 버전이 변경되어 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

Jay Kim

감사합니다!

안드로이드스튜디오 버전이 어떻게 되는지요?

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

552

2

apirequest.io 로딩 현상 & 사이트 이상함

0

449

1

PrimaryKey를 Nullable하게 만드는 이유

0

267

1