我正在尝试根据long / lat获取地址。似乎这样的事情应该有效吗?
Geocoder myLocation = Geocoder(Locale.getDefault());
List myList = myLocation.getFromLocation(latPoint,lngPoint,1);
问题在于我一直得到:方法Geocoder(Locale)未定义类型savemaplocation
任何帮助都会有所帮助。谢谢。
谢谢,我首先尝试了上下文,locale,然后失败并且正在查看其他一些构造函数(我曾经看过一个只提到locale)。无论如何,
它没有用,因为我仍然得到:方法Geocoder(Context,Locale)未定义类型savemaplocation
我有:导入android.location.Geocoder;
答案 0 :(得分:67)
以下代码片段正在为我做(lat和lng是在此位上方声明的双精度数):
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
答案 1 :(得分:48)
以下是使用Thread和Handler获取Geocoder答案而不会阻止UI的完整示例代码。
Geocoder调用程序,可以位于Helper类
中public static void getAddressFromLocation(
final Location location, final Context context, final Handler handler) {
Thread thread = new Thread() {
@Override public void run() {
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
try {
List<Address> list = geocoder.getFromLocation(
location.getLatitude(), location.getLongitude(), 1);
if (list != null && list.size() > 0) {
Address address = list.get(0);
// sending back first address line and locality
result = address.getAddressLine(0) + ", " + address.getLocality();
}
} catch (IOException e) {
Log.e(TAG, "Impossible to connect to Geocoder", e);
} finally {
Message msg = Message.obtain();
msg.setTarget(handler);
if (result != null) {
msg.what = 1;
Bundle bundle = new Bundle();
bundle.putString("address", result);
msg.setData(bundle);
} else
msg.what = 0;
msg.sendToTarget();
}
}
};
thread.start();
}
以下是您在UI活动中对此Geocoder程序的调用:
getAddressFromLocation(mLastKownLocation, this, new GeocoderHandler());
以及在UI中显示结果的处理程序:
private class GeocoderHandler extends Handler {
@Override
public void handleMessage(Message message) {
String result;
switch (message.what) {
case 1:
Bundle bundle = message.getData();
result = bundle.getString("address");
break;
default:
result = null;
}
// replace by what you need to do
myLabel.setText(result);
}
}
不要忘记在Manifest.xml
<uses-permission android:name="android.permission.INTERNET" />
答案 2 :(得分:36)
看起来这里发生了两件事。
1)在调用构造函数之前,您已经错过了new
关键字。
2)您传入Geocoder构造函数的参数不正确。您传递的是Locale
,预计会有Context
。
有两个Geocoder
构造函数,两者都需要Context
,还有一个Locale
:
Geocoder(Context context, Locale locale)
Geocoder(Context context)
<强>解决方案强>
修改您的代码以传入有效的上下文并包含new
,您应该好好去。
Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());
List<Address> myList = myLocation.getFromLocation(latPoint, lngPoint, 1);
注意强>
如果您仍然遇到问题,可能是一个许可问题。地理编码隐式使用Internet执行查找,因此您的应用程序将需要清单中的INTERNET
uses-permission标记。
在清单的manifest
节点中添加以下uses-permission节点。
<uses-permission android:name="android.permission.INTERNET" />
答案 3 :(得分:8)
原因是不存在的后端服务:
Geocoder类需要一个未包含在核心android框架中的后端服务。如果平台中没有后端服务,则Geocoder查询方法将返回空列表。
答案 4 :(得分:4)
首先使用Location和LocationManager类获取纬度和经度。现在尝试以下代码获取城市,地址信息
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocation(lat, lng, 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0) {
Address address = addresses.get(0);
for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
sb.append(address.getAddressLine(i)).append("\n");
sb.append(address.getLocality()).append("\n");
sb.append(address.getPostalCode()).append("\n");
sb.append(address.getCountryName());
}
城市信息现在是某人。现在将sb转换为String(使用sb.toString())。
答案 5 :(得分:2)
好吧,我仍然难过。所以这里有更多的代码。
在我离开地图之前,我致电SaveLocation(myMapView,myMapController);
这就是最终调用我的地理编码信息。
但是由于getFromLocation
可以抛出IOException
,我必须执行以下操作来调用SaveLocation
try
{
SaveLocation(myMapView,myMapController);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
然后我必须通过说它抛出IOExceptions来改变SaveLocation:
public void SaveLocation(MapView mv, MapController mc) throws IOException{
//I do this :
Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());
List myList = myLocation.getFromLocation(latPoint, lngPoint, 1);
//...
}
每次都会崩溃。
答案 6 :(得分:0)
我听说Geocoder在马车边上。我最近整理了一个示例应用程序,它使用Google的http地理编码服务从lat / long查找位置。随意在这里查看
答案 7 :(得分:0)
使用此
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);