Android Place.getLocale()返回null

时间:2018-06-29 03:19:33

标签: android google-api google-places-api

我正在使用Android Google Places SDK中的位置选择器来获取地址。地点选择器返回的地址很好,我可以获取地址LatLng,但是当我尝试通过语言环境获取国家/地区名称时,它会返回null!

这是我的代码段:

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

我已经通过Log.d检查确认place.getLocale()返回null。 documentation没有指定函数调用可以返回null,我不确定为什么会发生这种情况。

EDIT1:

根据documentation,Place类在内部使用语言环境来格式化地址。那么getLocale为什么返回null?!

1 个答案:

答案 0 :(得分:3)

我建议使用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();

有关地址对象的更多方法:http://developer.android.com/reference/android/location/Address.html