>

long/lat을 기반으로 주소를 얻으려고합니다. 이런 식으로 작동해야합니까?

Geocoder myLocation = Geocoder(Locale.getDefault());
    List myList = myLocation.getFromLocation(latPoint,lngPoint,1);

문제는 계속 얻는 것입니다 : Geocoder (Locale) 메소드는 savemaplocation 유형에 대해 정의되어 있지 않습니다

모든 도움이 도움이 될 것입니다. 감사합니다.

<시간> 고맙게도, 컨텍스트를 먼저 시도해 보았습니다. 로케일 하나를 먼저 시도했지만 실패했으며 다른 생성자 중 일부를 보았습니다 (로케일을 언급 한 것을 보았습니다). 어쨌든

여전히 얻었으므로 작동하지 않았습니다 : Geocoder (Context, Locale) 메소드는 savemaplocation 유형에 대해 정의되어 있지 않습니다

내가 가지고있는 것 : import android.location.Geocoder;


  • 답변 # 1

    다음 코드 스 니펫이 나를 위해하고 있습니다 (lat 및 lng는이 비트 위에 두 배로 선언됩니다) :

    Geocoder geocoder = new Geocoder(this, Locale.getDefault());
    List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
    
    

  • 답변 # 2

    UI를 차단하지 않고 지오 코더 응답을 얻기 위해 스레드 및 핸들러를 사용하는 전체 예제 코드는 다음과 같습니다.

    지오 코더 호출 프로시 저는 헬퍼 클래스에 위치 할 수 있습니다

    public static void getAddressFromLocation(
            final Location location, final Context context, final Handler handler) {
        Thread thread = new Thread() {
            @Override public void run() {
                Geocoder geocoder = new Geocoder(context, Locale.getDefault());   
                String result = null;
                try {
                    List<Address> list = geocoder.getFromLocation(
                            location.getLatitude(), location.getLongitude(), 1);
                    if (list != null && list.size() > 0) {
                        Address address = list.get(0);
                        // sending back first address line and locality
                        result = address.getAddressLine(0) + ", " + address.getLocality();
                    }
                } catch (IOException e) {
                    Log.e(TAG, "Impossible to connect to Geocoder", e);
                } finally {
                    Message msg = Message.obtain();
                    msg.setTarget(handler);
                    if (result != null) {
                        msg.what = 1;
                        Bundle bundle = new Bundle();
                        bundle.putString("address", result);
                        msg.setData(bundle);
                    } else 
                        msg.what = 0;
                    msg.sendToTarget();
                }
            }
        };
        thread.start();
    }
    
    

    UI 활동에서이 지오 코더 절차에 대한 호출은 다음과 같습니다.

    getAddressFromLocation(mLastKownLocation, this, new GeocoderHandler());
    
    

    및 UI에 결과를 표시하는 핸들러 :

    private class GeocoderHandler extends Handler {
        @Override
        public void handleMessage(Message message) {
            String result;
            switch (message.what) {
            case 1:
                Bundle bundle = message.getData();
                result = bundle.getString("address");
                break;
            default:
                result = null;
            }
            // replace by what you need to do
            myLabel.setText(result);
        }   
    }
    
    

    Manifest.xml 에 다음 권한을 부여하는 것을 잊지 마십시오

    <uses-permission android:name="android.permission.INTERNET" />
    
    

  • 답변 # 3

    여기에 두 가지 일이있는 것 같습니다.

    1) 당신은 new 를 놓쳤다  생성자를 호출하기 전의 키워드

    2) 지오 코더 생성자에 전달하는 매개 변수가 올바르지 않습니다. 당신은 Locale 에 전달   Context 를 기대하는 곳 .

    2 개의 Geocoder 가 있습니다  생성자 (둘 다 Context 필요) , 그리고 또한 Locale 를 복용 :

    Geocoder(Context context, Locale locale)
    Geocoder(Context context)
    
    

    솔루션

    유효한 컨텍스트를 전달하고 new 를 포함하도록 코드를 수정하십시오.  잘 가야합니다.

    Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());   
    List<Address> myList = myLocation.getFromLocation(latPoint, lngPoint, 1);
    
    

    참고

    여전히 문제가있는 경우 권한 문제 일 수 있습니다. 지오 코딩은 암시 적으로 인터넷을 사용하여 조회를 수행하므로 애플리케이션에 INTERNET 가 필요합니다.  매니페스트의 uses-permission 태그.

    manifest 내에 다음과 같은 사용 권한 노드를 추가하십시오.  매니페스트의 노드.

    <uses-permission android:name="android.permission.INTERNET" />
    
    

  • 답변 # 4

    이 이유는 존재하지 않는 백엔드 서비스입니다 :

    와이즈 비즈 와이즈 비즈

  • 답변 # 5

    먼저 Location 및 LocationManager 클래스를 사용하여 위도와 경도를 얻습니다. 이제 도시, 주소 정보 가져 오기에 대한 아래 코드를 시도하십시오

    도시 정보는 이제 sb입니다. 이제 sb.toString () 사용하여 sb를 String으로 변환하십시오.

    The Geocoder class requires a backend service that is not included in the core android framework. The Geocoder query methods will return an empty list if there no backend service in the platform.

  • 이전 php - 날짜가 주어진 범위에 있는지 확인하는 방법?
  • 다음 javascript - 글꼴 (@ font-face)이 이미로드되었는지 확인하는 방법