Error de RPC con Geocoder

Después de varios días para aprender cómo funciona Android, decidí crear mi primera aplicación: una aplicación sencilla que muestra el GMap desde una dirección proporcionada por el usuario con un sencillo widget EditText .
Yo uso Geocoder para hacer eso.

Después de un pequeño bugtracking con logcat, aquí está la excepción devuelta por 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) 

Y ahora aquí está el código señalado por el rastreo de la pila:

 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(); } 

Obviamente, este código es una parte de una instanciación de MapActivity .

Hice algunas pruebas con diferentes versiones de Google APIS (8, 7, 4) y diferentes versiones de la plataforma SDK (2.2, 2.1, 1.6), pero no hay suerte. Acabo de notar que la API de Google 8 contiene un error conocido y devolvió una Service Unavailable Exception lugar de RPC Failed 1 .

Por otro lado, traté de ejecutar mi aplicación directamente en mi dispositivo (HTC Desire 2.1) y me di cuenta del mismo comportamiento (es decir: no hay comportamiento, un mapa con EE.UU. en su centro).

Aquí viene el permiso de usuario del Manifiesto de Android:

 <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" /> 

Por favor, visite mi post No se puede marcar mientras se muestra la ubicación actual en 'mapview' Creo que con alguna modificación previa que puede ser capaz de hacer lo que usted apunta.

Creo que hay dos razones para usted.

  1. No probó, pero Geocoder seguirá sin estar disponible cuando se ejecuta en el simulador. Incluso si geocoder.isPresent () devuelve true. Hay solución en la web, basta con leer el número 8816 – android para getFromLocationName (..) en el comentario 21 y se adjunta ReverseGeocoder.java

  2. Al igual que Stefan dijo: Cuando se lanza en el dispositivo de allí la api-clave es necesaria. Tiene que ser agregado en el layout.xml de su mapa.

La mejor manera de crear y probar un mapview para mí era implementarlo como normal y registrarlo y probar la solución si "Service not Available" .equals (exception.getMessage ()).

Esa es mi función de geocodificación, su trabajo bien en google API 7. Espero que sea útil

 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; } 

La clase Geocoder es buggy. Funciona extrañamente a veces. Recomiendo no utilizar para obtener ubicación. En su lugar, Local Search API y Location manager para usar los servicios de localización.

  • Retrofit 2: @FormUrlEncoded con campos predeterminados
  • Sax - ExpatParser $ ParseException
  • Clase de llamada en ButtonClick (Android)
  • ¿Lanzar automáticamente la aplicación de Android después de subirla al teléfono?
  • FQL Query para obtener cumpleaños de amigos de Facebook en los próximos 30 días con Android
  • ¿JFreeChart funciona / comple en Android 2.x
  • Implementación de un grupo de subprocesos dentro de un servicio
  • Cómo borrar un JSONArray
  • Error de c2dm 401 al enviar mensajes después de recibir id y token de autenticación
  • Actualización de información de contacto de Android con intención?
  • Android FragmentTabHost - ¿Todavía no está completamente horneado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.