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:
- Android: howto parse URL String con espacios al objeto URI?
- ¿Castrará Android la tecnología Jazelle de ARM?
- Tensorflow Android demo: cargar un gráfico personalizado?
- Android - cómo agregar @hide anotación en mi proyecto
- Uso de las clases Fragment y AppCompatActivity juntos
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" />
- Uso de Facebook y Google Plus en la aplicación Android de SoundCloud
- ¿Es SpannableString.setSpan () 2º parm 0-based?
- Persistencia de objetos con Realm (error: Cambiar datos de Realm sólo se puede hacer desde dentro de una transacción)
- Android GPS tarda un tiempo en ser preciso
- Cardiómetro animación en Android
- Anotación @Override en Android
- ¿Cómo obtener eficientemente una matriz corta de recursos en Android?
- ListView: deshabilitar el clic / enfoque
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.
-
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
-
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.
- Actualizar una notificación en curso en silencio
- ¿Cómo usar el Porcentaje para el diseño de Android?