geocoder.getFromLocationName仅返回null

tes*_*est 6 android illegalargumentexception google-geocoder

在过去的两天里,当IllegalArgumentException我试图从地址中获取坐标时,我在Android代码中收到错误,甚至反转,从经度和纬度获取地址时,我会忘记这一点.这是代码,但我看不到错误.它是一个标准的代码段,可以在Google搜索中轻松找到.

public GeoPoint determineLatLngFromAddress(Context appContext, String strAddress) {
    Geocoder geocoder = new Geocoder(appContext, Locale.getDefault());
    GeoPoint g = null; 
    try {
        System.out.println("str addres: " + strAddress);
        List<Address> addresses = geocoder.getFromLocationName(strAddress, 5);
        if (addresses.size() > 0) {
            g = new GeoPoint(
               (int) (addresses.get(0).getLatitude() * 1E6),
               (int) (addresses.get(0).getLongitude() * 1E6)
            );
        }
    } catch (Exception e) {
        throw new IllegalArgumentException("locationName == null");
    }
    return g;
 }
Run Code Online (Sandbox Code Playgroud)

这些是manifest.xml文件的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

我也确实声明了Google API密钥: <uses-library android:name="com.google.android.maps" />

从上面的代码段,geocoder是不是null,都不是addressappContext,和我绊倒在这里:geocoder.getFromLocationName(strAddress, 5);

我做了很多谷歌搜索,发现没有任何效果,我找到的最重要的信息是:

Geocoder类需要一个未包含在核心android框架中的后端服务.

Sooo,我现在很困惑.我需要在代码中调用,导入,添加,使用...以使其工作?我使用的是Google API 2.2,API等级8.如果有人找到了解决此问题的解决方案或文档指针,我没有发现,请告诉我们.

pmk*_*mko 13

我有一个类似的问题,发现轮询Geocoder,直到我得到一个结果.这是我如何做到这一点,到目前为止工作得很好.

try {
    List<Address> geoResults = geocoder.getFromLocationName("<address goes here>", 1);
    while (geoResults.size()==0) {
        geoResults = geocoder.getFromLocationName("<address goes here>", 1);
    }
    if (geoResults.size()>0) {
        Address addr = geoResults.get(0);
        myLocation.setLatitude(addr.getLatitude());
        myLocation.setLongitude(addr.getLongitude());
    }
} catch (Exception e) {
    System.out.print(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)


San*_*ndy 0

在 Android 2.0 上运行你的代码,它会工作的。我对可能的代码也有同样的问题。2.2 不行,不知道为什么