我正在开发一个应用程序,它接受用户输入,然后将地图集中在用户输入的内容上。我已正确安装了Google Maps API。地图显示出来。我还确保模拟器是谷歌API。我测试了我的代码,geocoder.getFromLocationName返回null。我查了这些问题并尝试了不同的解决方案,但没有一个有效。这是我的代码。
public class GetURL extends MapActivity {
Geocoder geocoder;
MapView mapView = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView)findViewById(R.id.geoMap);
mapView.setBuiltInZoomControls(true);
int lat = (int)(30.334954*1000000);
int lng = (int)(-81.5625*1000000);
GeoPoint pt = new GeoPoint(lat,lng);
mapView.getController().setZoom(10);
mapView.getController().setCenter(pt);
mapView.getController().animateTo(pt);
geocoder = new Geocoder(this);
}
public void first_location(View arg0) {
try {
EditText loc = (EditText)findViewById(R.id.location);
String locationName = loc.getText().toString();
List<Address> addressList =
geocoder.getFromLocationName(locationName, 5);
if(addressList!=null && addressList.size()>0)
{
int lat = (int)(addressList.get(0).getLatitude()*1000000);
int lng = (int)(addressList.get(0).getLongitude()*1000000);
GeoPoint pt = new GeoPoint(lat,lng);
mapView.getController().setZoom(15);
mapView.getController().setCenter(pt);
mapView.getController().animateTo(pt);
}
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:4)
如果您的应用在真实设备上运行,那么您的代码应该没问题。将地理编码视为公司必须为其设备订阅或购买的服务。我认为他们中的大多数人只使用谷歌,但他们可能也会使用Bing或其他一些。
来自the docs:
Geocoder类需要一个未包含的后端服务 核心android框架。 Geocoder查询方法将返回一个 如果平台中没有后端服务,则为空列表。使用 isPresent()方法确定是否有Geocoder实现 存在。
根据我的经验,从模拟器调用geocoder.isPresent()
将返回false,并且从真实手机返回true,只要真实手机是由您听说过的公司制作的。
如果您想要一个解决方案/备份服务,您可以像通过网页一样通过HTTP查询Google Maps API。这个答案中有一个例子here。
答案 1 :(得分:0)
您正在测试哪种API版本?早期Android版本似乎存在错误 Geocoder works in 1.6 but not in 2.2 emulator
还要确保您的应用具有INTERNET权限(我认为它会在地图显示地图图块时执行)
我总是使用真实设备来测试位置功能,因为我发现它更容易,更接近真实场景。
请注意,地理编码器功能仅适用于官方Android设备,即带有Market / Gmail / Maps等的设备。因此,没有Android Market的低成本Android设备将无法提供地理编码结果。