Android Place.getLocale () возвращает ноль - PullRequest
0 голосов
/ 29 июня 2018

Я использую средство выбора мест из Android Google SDK мест, чтобы получить адреса. Средство выбора мест возвращает адреса очень хорошо, я могу получить адрес, LatLng, но когда я пытаюсь получить название страны через локаль, он возвращает ноль!

Вот мой фрагмент кода:

SupportPlaceAutocompleteFragment mAddressEditText = (SupportPlaceAutocompleteFragment) getSupportFragmentManager().findFragmentById(R.id.address);
mAddressEditText.setHint("Address");
mAddressEditText.setOnPlaceSelectedListener(new PlaceSelectionListener()
{
    @Override
    public void onPlaceSelected(Place place)
    {
        // TODO: Get info about the selected place.
        Log.d(TAG, "Place selected");
        mAddressOK = true;
        mAddress = place.getAddress().toString();
        mLocation = place.getLatLng();
        mCountry = place.getLocale().getDisplayCountry();
    }

    @Override
    public void onError(Status status)
    {
        // TODO: Handle the error.
        Log.d(TAG, "Invalid Place Selected.");
        mAddressOK = false;
        invalidAddressDialog.show();
    }
});

Но я получаю следующую ошибку:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.util.Locale.getDisplayCountry()' on a null object reference

Я убедился, что place.getLocale () возвращает ноль через проверку Log.d. В документации не указано, что вызов функции может вернуть значение null, и я не уверен, почему это происходит.

EDIT1:

Согласно документации класс Place внутренне использует языковой стандарт для форматирования адреса. так почему же getLocale возвращает null?!

1 Ответ

0 голосов
/ 29 июня 2018

Я предлагаю использовать GeoCoder для получения названия страны или аналогичной информации о месте. Поскольку у вас есть LatLng, теперь вы можете создать GeoCoder объект.

LatLng coordinates = place.getLatLng(); // Get the coordinates from your place
Geocoder geocoder = new Geocoder(this, Locale.getDefault());

List<Address> addresses = geocoder.getFromLocation(
            coordinates.latitude,
            coordinates.longitude,
            1); // Only retrieve 1 address
Address address = addresses.get(0);

Затем вы можете вызвать эти методы, чтобы получить необходимую информацию

address.getCountryCode();
address.getCountryName();

Дополнительные методы для объектов Address: http://developer.android.com/reference/android/location/Address.html

...