我正在使用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,我不确定为什么会发生这种情况。
根据documentation,Place类在内部使用语言环境来格式化地址。那么getLocale为什么返回null?!
答案 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