我正在使用Locationmanager获取用户GeoPoints,然后将其转换为城市/州。问题在于,当发生这种情况时,某些用户会“崩溃”,当我将如下所示的地理点转换为城市转换时,它们不会崩溃。所以我指出了这一点,并且我认为根据他们的地理坐标,它会为某些人返回null。 如果我绝对需要,有没有更可靠的方法来获得某个城市?
public class UserLocation implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
if (loc != null)
{
mLatitude = loc.getLatitude();
mLongitude = loc.getLongitude();
Geocoder geoCoder = new Geocoder(getActivity(), Locale.getDefault());
List<Address> addresses;
try {
addresses = geoCoder.getFromLocation(mLatitude, mLongitude, 10);
int i=1;
for(Address addObj:addresses)
{
// Looping once
if(i==1)
{
//Setting city
mCity = addObj.getSubLocality();
//setting state
mState = returnStateAbbreviation(addObj.getAdminArea());
i++;
}
}
} catch (IOException e1) {
e1.printStackTrace();
}}
else
{
Log.i(mTag, "No location found, hrmp?");
}
// Stopping Location Updates
mLocationManager.removeUpdates(mLocationListener);
}
或者更简单地比较2个地理位置以显示它们之间的距离,然后列出而不是城市和州?
答案 0 :(得分:0)
正如@Selvin所说,getFromLocation可以根据docs
返回null返回 Address对象列表。如果未找到匹配项或没有可用的后端服务,则返回 null或空列表。
在遍历地址之前,您需要检查它是否为空
addresses = geoCoder.getFromLocation(mLatitude, mLongitude, 10);
if (addresses != null) {
int i=1;
for(Address addObj:addresses)
{
...
}
}
关于你的第二个问题,这取决于你想做什么,但计算两点之间的距离很容易。您可以使用this Location method
public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)