地理编码器的 RPC 错误

2022-09-01 17:50:36

经过几天的学习Android是如何工作的,我决定建立我的第一个应用程序:一个简单的应用程序,它从用户提供的地址显示GMap,并提供一个简单的小部件。
我曾经这样做过。EditTextGeocoder

在使用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 ExceptionRPC 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" />

答案 1

请访问我的帖子 无法在“mapview”中显示当前位置时进行标记,我认为通过一些事先的修改,您可以做任何您想要做的事情。


答案 2

我想,你有两个原因。

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

  2. 就像Stefan说的:当在设备上启动时,需要api密钥。必须添加到地图视图的布局.xml中。

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


推荐