第一步:用一个工具类存放getAddress()方法
/**
* 根据经纬度获取地理位置
* * @param context 上下文
*
* @param latitude 纬度
* @param longitude 经度
* @return {@link Address}
*/
public static Address getAddress(Context context, double latitude, double longitude) {
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
if (addresses.size() > 0)
return addresses.get(0);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
第二步:开一个线程去调起getAddress()方法(关键)
new Thread() {
@Override
public void run() {
//需要在子线程中处理的逻辑
if (location != null) {
Address tempAddress = LocationUtil.getAddress(context,location.getLatitude(),location.getLongitude());
}
}
}.start();
第三步:从子线程中拿出解析后的地址
(在调用前先准备好)
public void getAdress(final LatLon latLon){ if (latLon != null){ new Thread() { @Override public void run() { //设置地理地址 Address address = LocationUtil.getAddress(DCTableActivity.this, latLon.getLat(), latLon.getLon()); if (address != null) { String locationAddr = address.getAddressLine(0).replace("Unnamed Road", ""); SharedPreferences.Editor editor = getCacheEdit(); editor.putString(GEOGRAPHICAL_POSITION,locationAddr); editor.commit(); } } }.start(); } }