2011-05-15 13 views
14

Estoy intentando que las demostraciones de mapas funcionen, como se indica en los proyectos de ejemplo de la API de Google . Estoy usando AVD y he intentado con las versiones 8, 10 y 11 y tengo el mismo problema.Android MapActivity: No se pudo obtener el cliente de la fábrica de conexiones

He generado mi propia clave de depuración y la he agregado al proyecto. Puedo ver el mapa en la aplicación de inicio, y puede hacer zoom en el etc. - así que estoy obteniendo el mapa azulejos, bien. Sí, tengo los permisos correctos y la biblioteca establecida en el archivo Manifiesto (según muestras).

Pero no puedo establecer una ubicación en el mapa, ni a través de DDMS ni Telnet. Me veo el siguiente error en LogCat: MapActivity: No se pudo obtener el cliente fábrica de conexiones

He leído numerosos hilos con respecto a este tema, pero siempre parece ser como resultado de una clave de API mal; que no tengo, ya que estoy recuperando mosaicos de mapas.

así que creé mi propio proyecto para probar esta nueva, y estoy ejecutando el siguiente código de inicialización de mi mapa:

myLocationOverlay = new MyLocationOverlay(this, mapView); 
       mapView.getOverlays().add(myLocationOverlay); 
       myLocationOverlay.enableCompass(); 
       myLocationOverlay.enableMyLocation(); 
       Log.i("funkatron: ", "ABOUT TO CALL RUN ON FIRST FIX"); 
       myLocationOverlay.runOnFirstFix(new Runnable() { 
           public void run() { 
               String loc = "we have a location, executing AnimateTo(). 
"+myLocationOverlay.getMyLocation().toString(); 
               Log.i("funkatron:",loc); 

mapController.animateTo(myLocationOverlay.getMyLocation()); 
           } 
       }); 

veo mi primera declaración de registro, pero nunca el segundo, y "MapActivity : No se pudo obtener la conexión cliente de fábrica "se escribe en LogCat en ese punto .

He leído que hay problemas con los emuladores de SDK v8, así que tengo intentado con v10 y 11 - pero todavía no es una alegría. Todavía NO he probado esto en un dispositivo real, lo haré pronto.

Cualquier ayuda en este tema sería muy apreciada - es realmente desconcertante mí;)

aplausos

+0

@funaktron: "Pero no puedo establecer una ubicación en el mapa, ni a través de DDMS ni Telnet. Veo el siguiente error en LogCat: MapActivity: No se pudo obtener el cliente de fábrica de conexiones" - ese error no tiene nada que ver con tu código Todos lo entienden, incluso con código de trabajo. Con respecto a su problema, nunca he intentado utilizar 'MyLocationOverlay' en un emulador con una solución real, así que no tengo idea de si funciona. El emulador SDK 8 es realmente el bueno. No use emuladores SDK 9/10, ya que se bloquearán cuando intente configurar la ubicación falsa. El emulador SDK 11 debería funcionar, si no es demasiado lento para usted. – CommonsWare

+0

@CommonsWare: Gracias por la publicación. Después de otras pruebas, el mismo código funciona en el dispositivo, es decir, la superposición de ubicación del mapa funciona, por lo que es simplemente una cuestión de emulación. Aunque es interesante que nadie pueda responder por qué aparece el error; la pregunta aún permanece. – electricSunny

Respuesta

6

i tenía exactamente la misma situación inicial como usted describió.

cuando vea los mosaicos de mapas no son, obviamente, algunos desaparecidos para ver una posición en el mapa:

1. necesita un lugar. reconocí que establecer solo una posición geográfica a través de la vista DDMS para el emulador no es suficiente. tienes que presionar explícitamente cada vez el botón "Enviar" en DDMS para activar una actualización de ubicación en tu emulador. (sólo por mencionar: en un dispositivo real, a veces tienes que caminar un poco para que tu dispositivo obtenga una actualización de ubicación;), estaba tan enojado hasta que caminé pensando qué hacer ahora ^^)

2. necesita una implementación correcta de ItemizedOverlay con un OverlayItem correcto. escribí mi propia superposición que se puso un poco "complicada". Si no está seguro de si su aplicación es correcta, utilice esta guía para crear una aplicación con cambios mínimos Map view tutorial android developers

o utilizar esto:

private class MyItemizedOverlay extends ItemizedOverlay { 
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

    public MyItemizedOverlay(Drawable defaultMarker) { 
      super(boundCenterBottom(defaultMarker)); 
    } 

    public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     populate(); 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
    } 

    @Override 
    public int size() { 
     return mOverlays.size(); 
    } 
} 

private void updateLocationOverlay() { 
    if (location == null) { return }; 
    List<Overlay> mapOverlays = mapView.getOverlays(); 
    Drawable drawable = this.getResources().getDrawable(R.drawable.XXXX); 
    MyItemizedOverlay myItemizedOverlay = new MyItemizedOverlay(drawable); 
    GeoPoint point = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6)); 

    OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!"); 
    myItemizedOverlay.addOverlay(overlayitem); 
    mapOverlays.add(myItemizedOverlay); 
} 

quiero especialmente señalar que se debe llamar boundCenter o boundCenterBottom en el dibujablede lo contrario no se dibujará. También tenga cuidado si usa diferentes marcadores en la misma superposición con overlayItem.setMarker, que también lo llamará allí.

3. Tienes que mover la vista en el mapa a tu punto. se puede lograr esto así:

MapController mapController = mapView.getController(); 
mapController.setCenter(point) 

i reconoció que la función mapController.zoomToSpan no funciona. (al menos para mí, todavía estoy desarrollando en esta aplicación). tal vez sea lo mismo con animateTo. No lo intenté. establecer el centro funciona. (y setZoom nivel también).

Quizás haya algo en los puntos que mencioné que podría llevar a que tu mapa no funcione como deseas.

¡Buena suerte!

editar: me olvidé de mencionar que todavía estoy recibiendo ese error de cliente de fábrica, incluso funciona para obtener una ubicación válida, real en el dispositivo y simulador falso a través de ddms send). simplemente ignoro por ahora.

+0

Diego, gracias por la respuesta. Voy a darle vueltas y volveré a ti. Cheers – electricSunny

+0

No consigo que la biblioteca funcione en el dispositivo si firmo el archivo APK. Si comienzo en Debug-Mode, funciona muy bien ... ¿Alguna idea? –

2

que enfrentan el mismo problema y el problema era que echaba de menos cuando me puse el diseño apropiado a la MapActivity el código era

setContentView(R.layout.main); 

el archivo de diseño main.xml no contiene ningún MapView

se convirtió en

setContentView(R.layout.mapview) 

que tienen el siguiente código XML

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <com.google.android.maps.MapView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:enabled="true" 
     android:clickable="true" 
     android:apiKey="YOU_API_KEY" 
     /> 
</LinearLayout> 

El mapa se trabajar fid este momento, espero que esto ayudaría

También puede comprobar si ha añadido nada a su diseño MapView debido a la adición de tales puntos de vista resultaría en este error

4

favor asegúrese de usar permisos en su aplicación AndroidManifest.xml.

añadir estas 3 líneas en AndroidManifest.xml

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

y también asegurarse de almacén de claves está apuntando al almacén de claves que ha creado.

En eclipse Ventana de comprobación -> Preferencias -> Android -> Compilar: almacén de claves de depuración predeterminado apunta a la clave que ha creado con la herramienta de claves; de lo contrario, use el botón Examinar y apunte a la clave real.

+4

ACCESS_COARSE_LOCATION no es necesario. –

2

Tuve el mismo problema con "MapActivity Could not get connection factory client" ¡La forma en que resolvió el problema era muy simple! Acabo de desinstalar toda la aplicación y la reinstalé. ¡¡¡Funcionó!!!

+0

¡Hola! También tengo ese problema ... así que quiero preguntar, ¿qué quiere decir con volver a instalar la aplicación? Porque solo la ejecutamos en el emulador ... ¿quiere reinstalar nuestra aplicación en el emulador? ¡Gracias de antemano! : D –

+0

también estoy enfrentando el mismo problema y tampoco entiendo qué instalarlo y desinstalarlo, usamos el emulador simple –

+0

Para mí dejó de funcionar después de jugar con diferentes versiones del sdk. Intentando volver a la primera versión pero sin éxito. Casi dejo de intentarlo cuando tengo otra idea: ¿por qué no reiniciar el teléfono después de desinstalar y volver a instalar la aplicación? finalmente, funcionó. – cosmincalistru

0

que tenían el mismo problema a continuación main.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <com.google.android.maps.MapView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/mapview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:apiKey="Your API-KEY" 
    /> 

</LinearLayout> 

Luego cambié el principal.xml de la siguiente manera, el problema se resolvió

<?xml version="1.0" encoding="utf-8"?> 
<com.google.android.maps.MapView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/mapview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:apiKey="Your API-KEY" 
/> 
0

Parece que hay razones para que esto ocurra haya numerosas. Lo arreglé alterando mi objetivo de compilación de proyecto a api 10 (rclick en el proyecto/Propiedades/Android) y luego ejecuto en un emulador en el nivel 15 de api (¡aunque muy, muy despacio!).

4

Hola compañeros desarrolladores,

también he experimentado este problema y pasó casi la mitad de un día tratando de averiguar lo que estaba pasando. Inicialmente, la actividad del mapa no se mostraba y recibía un error que decía "No se pudo obtener el cliente de la fábrica de conexiones", que a su vez creó otro error, "java.io.IOException: el servidor devolvió 3".

La causa de esto es que Google no comunicó eficazmente a su base de desarrollo que mientras estaba en desarrollo, es decir, antes de firmar y liberar su aplicación, debe firmarla con una clave de depuración que se usa durante la prueba. Para hacerlo, siga el método a continuación que reemplaza la [contraseña] y [contraseña clave] con sus propias contraseñas.

Desde su directorio .android, emita el siguiente comando:

keytool -list -alias androiddebugkey -keystore debug.keystore storepass [password] -keypass [key password] 

Al hacer lo anterior se le complace recibir su huella digital MD5 certificado que se puede utilizar para inscribirse en la clave de API de Google Maps. Reemplace su clave API de Google Maps en su proyecto, haga un Proyecto Limpio y vuelva a ejecutar su aplicación. Ahora debería poder ver su Google Map y deshacerse de sus molestos errores.

How to obtain a Google Maps Android API Key

+1

si el comando anterior no funciona, intente usar android, android para ambas contraseñas. – Mat

+0

hice lo mismo que usted ha mencionado pero ahora está trabajando y mostrando el mismo error. –

0

Alguien ahí arriba ya lo dijo en un comentario: reiniciar el teléfono. O si está ejecutando en emulador: reinicie el emulador.

Cuestiones relacionadas