【发布时间】: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