【问题标题】:RPC Error with Geocoder地理编码器的 RPC 错误
【发布时间】:2011-05-19 05:32:54
【问题描述】:

在了解了 Android 的工作原理几天后,我决定构建我的第一个应用程序:一个简单的应用程序,它显示来自用户提供的地址的 GMap,并带有一个简单的 EditText 小部件。
我使用Geocoder 来做到这一点。

在使用 logcat 进行一些错误跟踪后,以下是 adb 返回的异常:

E/LocationMasfClient(   53): forwardGeocode(): RPC failed with status 1
W/System.err(  262): java.io.IOException: RPC failed with status 1
W/System.err(  262):    at   android.location.Geocoder.getFromLocationName(Geocoder.java:166)
W/System.err(  262):    at fr.meetopia.tinymap.MapViewActivity.testGeoCoder(MapViewActivity.java:104)
W/System.err(  262):    at fr.meetopia.tinymap.MapViewActivity.onCreate(MapViewActivity.java:38)
W/System.err(  262):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
W/System.err(  262):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
W/System.err(  262):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
W/System.err(  262):    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
W/System.err(  262):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)

现在这里是堆栈跟踪指向的代码:

Geocoder geoCoder = new Geocoder(this);
MapView mapView = (MapView) findViewById(R.id.mapview);
    MapController mc = mapView.getController();
    GeoPoint p;
    try {
        List<Address> addresses = geoCoder.getFromLocationName("paris france", 50);
        if (addresses.size() > 0) {
            p = new GeoPoint(
                    (int) (addresses.get(0).getLatitude() * 1E6), 
                    (int) (addresses.get(0).getLongitude() * 1E6));
            mc.animateTo(p);    
            mapView.invalidate();
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

显然,这段代码是MapActivity 实例化的一部分。

我使用不同版本的 Google APIS(8、7、4)和不同版本的 SDK平台(2.2、2.1、1.6),但没有运气。我刚刚注意到 Google API 8 包含一个已知错误并返回了 Service Unavailable Exception 而不是 RPC Failed 1

另一方面,我尝试直接在我的设备 (HTC Desire 2.1) 上运行我的应用程序,但我注意到了相同的行为(也就是说:没有行为,中心是美国的地图)。

Android Manifest 的用户权限来了:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

【问题讨论】:

  • 您找到原因了吗?我遇到了完全相同的问题!
  • 您是否正确设置了 Google 地图的 API 密钥?如果不使用 Google 地图,您也无法使用地理编码。有关密钥,请参见此处code.google.com/intl/de-DE/android/maps-api-signup.html
  • 您是否检查过以确保您的地理编码服务存在?例如geocoder.isPresent() 返回 true?

标签: java android android-emulator


【解决方案1】:

这是我的地理编码功能,它在 google API 7 上运行良好。希望对您有所帮助

public GeoPoint geoCoding(String name){
         Geocoder geoCoder = new Geocoder(context, Locale.getDefault() );   
         GeoPoint p = null;
            try {
                List<Address> addresses = geoCoder.getFromLocationName(
                    name, 5);
                if (addresses.size() > 0) {
                    p = new GeoPoint(
                            (int) (addresses.get(0).getLatitude() * 1E6), 
                            (int) (addresses.get(0).getLongitude() * 1E6));

                }    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return p;
       }

【讨论】:

    【解决方案2】:

    请访问我的帖子 Can't mark while showing the current location in 'mapview' 我认为通过事先修改,您可以做任何您想做的事情。

    【讨论】:

      【解决方案3】:

      我认为,你有两个原因。

      1. 未测试,但在模拟器中运行时 Geocoder 仍将不可用。即使 geocoder.isPresent() 返回 true。网络上有解决方法,只需在评论 21 中阅读 Issue 8816 - android for getFromLocationName( .. ) 并附上 ReverseGeocoder.java

      2. 就像 Stefan 所说:在设备上启动时,需要 api-key。必须在你的 mapview 的 layout.xml 中添加。

      为我创建和测试地图视图的最佳方法是像平常一样实现它并记录并尝试解决方法,如果“服务不可用”.equals(exception.getMessage())。

      【讨论】:

        【解决方案4】:

        Geocoder 类有问题。它有时很奇怪。 我建议不要用于获取位置。而是使用本地搜索 API 和位置管理器来使用位置服务。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多