geocoder.getFromLocationName不适用于模拟器吗?

时间:2012-02-22 15:34:14

标签: android google-maps-api-2 google-geocoder

我正在开发一个应用程序,它接受用户输入,然后将地图集中在用户输入的内容上。我已正确安装了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();

    }

}

2 个答案:

答案 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设备将无法提供地理编码结果。